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

Ran*_*ber 30 startup java services logout

我不知道从哪里开始寻找。我一直在阅读有关守护进程的内容,但不了解这个概念。

更多细节 :

  • 我一直在写一个从不停止的爬虫,并在互联网上通过 RSS 爬虫。
  • 爬虫是用 java 编写的 - 因此它现在是一个 jar。
  • 我是一台装有 Ubuntu 11.04 的机器的管理员。
  • 机器有可能会崩溃,所以我希望每次启动机器时爬虫都运行。
  • 此外,我希望它即使在我注销时也能继续运行。我不确定这是否可行,但大部分时间我都已注销,但我仍然希望它爬行。

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

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

Mar*_*ior 33

这是使用 SysVInit 执行此操作的简单方法。指示:

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

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

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

    #!/bin/bash
    
    java -jar myapp.jar 
    
    Run Code Online (Sandbox Code Playgroud)

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

    #!/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
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将脚本从系统开始(使用 SysV)。只需运行以下命令(以 root 身份):

    update-rc.d myscript defaults 
    
    Run Code Online (Sandbox Code Playgroud)

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

  • 这对我有用,谢谢。但是我必须使用以下命令使最后一个脚本(在您的示例中为“myscipt”)可执行: chmod 755 /etc/init.d/myscript 。否则 update-rc.d 命令无法执行。 (2认同)

小智 6

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

  • 新贵 init 守护进程和 initctl 实用程序
  • upstart-logd 为 logd 服务提供 logd 守护进程和作业定义文件
  • upstart-compat-sysv 为 rc 任务和提供与 SysVinit 兼容的重启、运行级别、关机和 telinit 工具提供作业定义文件
  • startup-tasks 为系统启动任务提供作业定义文件
  • system-services 为 tty 服务提供作业定义文件

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