如何编写一个执行现有启动脚本的初始化脚本?

如何编写一个执行现有启动脚本的初始化脚本?

我试图理解初始化进程

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

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

/etc/init.d/skeleton对我来说毫无意义,因为它似乎在寻找单个进程。而且大多数 init 脚本看起来太复杂了,我有点不知所措。

我真正想做的是:

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

如果这在启动时就发生,我会很高兴。

答案1

使用 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 start您可以通过运行来测试您的新服务sudo service my_script stop

答案2

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

使用命令行,您可以使脚本在 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有关详细信息,请参阅和中的 README 文件/etc/rc2.d

相关内容