如何使 jar 文件在启动时和注销时运行?

如何使 jar 文件在启动时和注销时运行?

我不知道从哪里开始查找。我一直在阅读有关守护进程的资料,但不明白这个概念。

更多细节 :

  • 我一直在编写一个永不停止的爬虫程序并通过 RSS 在互联网上进行爬虫。
  • 该爬虫是用 Java 编写的 - 因此它现在是一个 jar。
  • 我是装有 Ubuntu 11.04 的机器的管理员。
  • 机器有崩溃的可能性,所以我希望每次启动机器时爬虫都能运行。
  • 此外,我希望它即使在我退出后也能继续运行。我不确定这是否可行,但大多数时候我都退出了,但我仍然希望它能爬行。

有什么想法吗?有人能给我指出正确的方向吗?

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

答案1

这是一个使用 SysVInit 的简单方法。说明:

  1. 创建应用程序的启动和停止脚本。将其放在某个目录中,在我们的示例中为:

    • 启动脚本:/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
    
  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 
    

附言:我知道 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 个快速建议...

  1. 创建一个年代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 启动或终止它们。

  2. 运行的进程crond应在注销期间持续存在。也许可以将其添加到您的 crontab 中。

  3. 运行的进程nohup也应该持久。请参阅nohup:即使注销后仍运行命令

    $ nohup java -jar myapp.jar &
    

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

答案4

带有 Java 版本检查的 Linux 简单启动脚本授权代理 和 Windows身份验证代理程序

相关内容