如何在启动时和退出时运行jar文件?

我不知道从哪里开始寻找。 我一直在阅读关于守护进程的内容并且不理解这个概念。

更多细节 :

  • 我一直在写一个爬行器,在互联网上永远不会停止和抓取RSS。
  • 爬虫已用java编写 – 因此它现在是一个jar。
  • 我是拥有Ubuntu 11.04的计算机的管理员。
  • 机器有可能崩溃,所以我希望每次启动机器时都会运行爬虫。
  • 此外,即使我退出,我也希望它继续运行。 我不确定这是可能的,但大多数时候我已经退出了,我还是想抓它。

有任何想法吗? 有人能指出我正确的方向吗?

只是寻找最简单的解决方案。

使用SysVInit可以轻松实现此目的。 说明:

  1. 创建应用程序的开始和停止脚本。 把它放在某个目录上,在我们的例子中是:

    • 启动脚本: /usr/local/bin/myapp-start.sh
    • 停止脚本: /usr/local/bin/myapp-stop.sh

    每个人都会提供运行/停止应用程序的说明。 例如, myapp-start.sh内容可以简单如下:

     #!/bin/bash java -jar myapp.jar 

    对于stop脚本,它可以是这样的:

     #!/bin/bash # Grabs and kill a process from the pidlist that has the word myapp pid=`ps aux | grep myapp | awk '{print $2}'` kill -9 $pid 
  2. 创建以下脚本( myscript )并将其放在/etc/init.d

    /etc/init.d/myscript内容:

     #!/bin/bash # MyApp # # description: bla bla case $1 in start) /bin/bash /usr/local/bin/myapp-start.sh ;; stop) /bin/bash /usr/local/bin/myapp-stop.sh ;; restart) /bin/bash /usr/local/bin/myapp-stop.sh /bin/bash /usr/local/bin/myapp-start.sh ;; esac exit 0 
  3. 将脚本放在系统开始(使用SysV)。 只需运行以下命令( 以root身份 ):

     update-rc.d myscript defaults 

PS:我知道Upstart非常棒,而且我很喜欢旧的SysV init系统。

是! 有可能的。 🙂 Upstart是确保服务保持运行的方法。 它有五个包,默认安装:

  • Upstart init守护程序和initctl实用程序
  • upstart-logd为logd服务提供logd守护程序和作业定义文件
  • upstart-compat-sysv为rc任务提供作业定义文件,并提供与SysVinit兼容的reboot,runlevel,shutdown和telinit工具
  • startup-tasks为系统启动任务提供作业定义文件
  • system-services为tty服务提供作业定义文件

学习非常愉快,非常值得。 Upstart有一个网站: http : //upstart.ubuntu.com/

3快速建议……

  1. /etc/rc3.d (多用户控制台模式)中使用/etc/rc.0/etc/rc6.d相应K ill脚本创建一个S tart脚本,以便在系统关闭时以受控方式/etc/rc6.d Java程序(runevel 0)或重新启动(运行级别6)请参阅Runlevels简介 。

    您可以在运行级别2(rc2.d)中启动Java应用程序,但作为爬虫程序,它将需要TCP / IP。 因此,请确保您的网络服务事先在您的运行级别2中可用/启动。 网络肯定在运行级别3。

    /etc/init.d包含所有实际的启动/终止脚本。 /etc/rcN.d目录只包含指向它们的链接,前缀为S或K,分别为每个运行级别N启动或/etc/rcN.d它们。

  2. crond运行的进程应该在注销之间保持不变。 也许将它添加到您的crontab。

  3. 使用nohup运行的进程也应该持续存在。 请参阅nohup:即使在您注销后也运行命令 。

     $ nohup java -jar myapp.jar & 

    默认情况下,如果前者不可写, myapp.jar的标准输出将转到名为./nohup.out的文件或$HOME/nohup.out

使用时也要注意:

  update-rc.d myscript defaults 

拥有权限0755并使用或获取.sh之前的路径。 假设你的脚本在/root/test.sh上,你应该在访问test.sh之前先更改为CD /root/

所以最好的方法是在init.d上创建一个SH,然后改变你的sh的路径并在start函数中执行它。

使用Java版本检查Linux auth-agent和Windows auth-agent.bat的简单启动脚本

最简单的方法是使用supervisord 。 请在http://supervisord.org/上查看完整详情。

您还可以在此处查看更多详细信息:

系统启动时运行可执行jar文件

https://www.digitalocean.com/community/tutorials/how-to-install-and-manage-supervisor-on-ubuntu-and-debian-vps