我不知道从哪里开始查找。我一直在阅读有关守护进程的资料,但不明白这个概念。
更多细节 :
- 我一直在编写一个永不停止的爬虫程序并通过 RSS 在互联网上进行爬虫。
- 该爬虫是用 Java 编写的 - 因此它现在是一个 jar。
- 我是装有 Ubuntu 11.04 的机器的管理员。
- 机器有崩溃的可能性,所以我希望每次启动机器时爬虫都能运行。
- 此外,我希望它即使在我退出后也能继续运行。我不确定这是否可行,但大多数时候我都退出了,但我仍然希望它能爬行。
有什么想法吗?有人能给我指出正确的方向吗?
只是寻找最简单的解决方案。
答案1
这是一个使用 SysVInit 的简单方法。说明:
创建应用程序的启动和停止脚本。将其放在某个目录中,在我们的示例中为:
- 启动脚本:
/usr/local/bin/myapp-start.sh
- 停止脚本:
/usr/local/bin/myapp-stop.sh
每个命令都会提供运行/停止应用程序的说明。例如,
myapp-start.sh
内容可以简单到如下:#!/bin/bash java -jar myapp.jar
对于停止脚本,它可以是这样的:
#!/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
- 启动脚本:
创建以下脚本(
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
让脚本随系统一起启动(使用 SysV)。只需运行以下命令(以 root 身份):
update-rc.d myscript defaults
附言:我知道 Upstart 很棒等等,但我更喜欢旧的 SysV init 系统。
答案2
对的,这是可能的。 :)暴发户是确保服务持续运行的方法。它有五个包,全部默认安装:
- Upstart init 守护进程和 initctl 实用程序
- upstart-logd 为 logd 服务提供 logd 守护进程和作业定义文件
- upstart-compat-sysv 为 rc 任务以及提供与 SysVinit 兼容性的重启、运行级别、关闭和 telinit 工具提供作业定义文件
- startup-tasks 提供系统启动任务的作业定义文件
- system-services 为 tty 服务提供作业定义文件
学习过程非常有趣,非常值得。Upstart 有一个网站:http://upstart.ubuntu.com/
答案3
3 个快速建议...
创建一个年代tart 脚本
/etc/rc3.d
(多用户控制台模式)及其相应的钾脚本,/etc/rc.0
并/etc/rc6.d
在系统关闭(运行级别 0)或重新启动(运行级别 6)时以受控方式终止 Java 程序,请参阅运行级别介绍。您可能能够在运行级别 2 (rc2.d) 中启动 Java 应用程序,但作为爬虫程序,它将需要 TCP/IP。因此,请事先确保您的网络服务在运行级别 2 中可用/已启动。网络在运行级别 3 中肯定已启动。
/etc/init.d
包含所有实际的启动/终止脚本。/etc/rcN.d
目录只包含指向它们的链接,以 S 或 K 为前缀分别表示按运行级别 N 启动或终止它们。运行的进程
crond
应在注销期间持续存在。也许可以将其添加到您的 crontab 中。运行的进程
nohup
也应该持久。请参阅nohup:即使注销后仍运行命令。$ nohup java -jar myapp.jar &
默认情况下,
myapp.jar
的标准输出将转到名为 的文件./nohup.out
,或者$HOME/nohup.out
如果前者不可写。