如何编写将执行现有启动脚本的init脚本?

我正在尝试理解init进程

我有一个脚本,它启动3个后台进程(2个shell脚本和一个Java应用程序)。 它在命令行中运行得很好。

我想在启动时执行该脚本。

/etc/init.d/skeleton对我没有意义,因为它似乎正在寻找一个单一的过程。 而且大多数init脚本看起来都很复杂,我有点迷失了。

我真正想做的就是:

 #!/bin/bash /opt/myapp/bin/my_start_script 

如果那只是在创业时发生,我会非常高兴。

如果要使用GUI,可以将链接添加到Ubuntu中的“启动应用程序”应用程序。 这样做的缺点是它只会在您登录GUI时执行(即不是为其他用户执行,而不是在您不登录Ubuntu Desktop环境时执行)。

使用命令行,可以在加载Ubuntu桌面之前运行脚本。

要执行此操作,请使脚本可执行,将其复制到/etc/init.d并创建指向/etc/rc2.d脚本的符号链接(如果要在默认的多用户运行级别(运行级别2)中执行)。 您应该使用S重命名它,然后是您希望它执行的顺序,与其中的其他链接相对应。

  1. 使脚本可执行:

    sudo chmod u+x myscript.sh

  2. 将其复制到/etc/init.d

    sudo cp myscript /etc/init.d

  3. 在rc2.d中创建一个符号链接:

    cd /etc/rc2.d

    sudo ln -s /etc/init.d/myscript.sh

  4. 根据命名方案重命名:

    sudo mv myscript.sh S70myscript.sh

有关更多信息,请参阅/etc/init.d/etc/rc2.d的README文件。

使用Upstart作为System V Init脚本已被弃用且更简单。

只需将此文件my_script.conf放入/ etc / init即可

 # Start when pc starts up start on runlevel [2345] # Stop when pc shuts down stop on runlevel [016] # Start Script exec my_start_script # Stop Script pre-stop my_stop_script 

Pre Stop脚本将包含用于终止3进程的代码,并且是可选的,当服务停止时,sigterm将被发送到my_start_script进程,但根据您的脚本,它可能已经退出。

您可以通过运行sudo service my_script startsudo service my_script stop来测试新服务