如何编写将执行现有启动脚本的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重命名它,然后是您希望它执行的顺序,与其中的其他链接相对应。
-
使脚本可执行:
sudo chmod u+x myscript.sh
-
将其复制到
/etc/init.d
:sudo cp myscript /etc/init.d
-
在rc2.d中创建一个符号链接:
cd /etc/rc2.d
sudo ln -s /etc/init.d/myscript.sh
-
根据命名方案重命名:
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 start
和sudo service my_script stop
来测试新服务