如何在启动时在/etc/init.d中创建脚本?


83

我想我已经读了一段时间,但是我不记得它是如何完成的。本质上,我有一项服务,/etc/init.d希望在启动时自动启动。我记得它与将脚本符号链接到/etc/rc.d目录有关,但目前我还不记得。这是什么命令?

我相信我使用的是Fedora / CentOS衍生产品。


这取决于您的操作系统。您正在运行什么unix变体,如果是Linux,则是什么发行版?这其中包括/etc/init/etc/init.d/etc/rc.d/etc/rc.local和几个它有?
Gilles

1
我想我正在使用CentOS或类似的产品。Debian的答案会有所不同吗?我也对Debian的解决方案感兴趣。
Naftuli Kay 2011年

Answers:


109

如前所述,如果您使用的是基于Red Hat的系统,则可以执行以下操作:

  1. 创建脚本并将其放置在/etc/init.d(例如/etc/init.d/myscript)中。该脚本应具有以下格式:
#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....

# Source function library.
. /etc/init.d/functions

start() {
    # code to start app comes here 
    # example: daemon program_name &
}

stop() {
    # code to stop app comes here 
    # example: killproc program_name
}

case "$1" in 
    start)
       start
       ;;
    stop)
       stop
       ;;
    restart)
       stop
       start
       ;;
    status)
       # code to check status of app comes here 
       # example: status program_name
       ;;
    *)
       echo "Usage: $0 {start|stop|status|restart}"
esac

exit 0 

该格式非常标准,您可以在中查看现有脚本/etc/init.d。然后,您可以使用诸如so /etc/init.d/myscript start或的脚本chkconfig myscript start。该ckconfig手册页介绍了剧本的标题:

 > This says that the script should be started in levels 2,  3,  4, and
 > 5, that its start priority should be 20, and that its stop priority
 > should be 80.

示例开始,停止和状态代码使用在中定义的辅助函数 /etc/init.d/functions

  1. 启用脚本

    $ chkconfig --add myscript 
    $ chkconfig --level 2345 myscript on 
    
  2. 检查脚本是否确实启用-选择的级别应显示为“ on”。

    $ chkconfig --list | grep myscript
    

3
Chkconfig是您想要的。+1
whoami

为什么要在运行级别2、3、4和5上启动init?您是否需要避免避免在运行级别2启动服务器?而且在RHEL上还没有定义运行级别4,那么为什么要尝试在该运行级别启动它?不批评,只想知道。我是本地Slackware用户。
Bruce Ediger

RHEL上没有定义4,但确实存在。您可以为自己的东西偷东西。
凯文M

标头取自chkconfig手册页。在大多数情况下,我个人坚持使用235或35。
canen 2011年

如果在启动过程中启动失败,是否可以查看日志?
Utkarsh Sinha 2014年

10

您测试一下,您的计算机通常会开始进入哪个运行级别。

runlevel

通常是5或2-有各种约定,但实际上并没有成立,afaik。Ubuntu使用2,而我以前使用的以前的发行版一直使用

  • 1个单用户(超级用户)
  • 2个多用户
  • 3个多用户+网络
  • 4个未使用/用户定义
  • 5多用户,网络+ X11

然后,你从你的初始化脚本做一个符号链接,也许/etc/init.d/foobar/etc/rc2.d/SXYfoobar

S的意思是“在此运行级别下启动此脚本(此处:2)。XY是两位十进制数字,与序列相关,脚本将启动。

如果您先运行脚本S45barfoo,而S55foofoo取决于您的脚本,则可以在45到55之间选择xy。对于相等的数字,引导顺序是不确定的。

同时,Ubuntu切换(正在切换)到另一个名为的启动过程upstart

并注意:链接并非总是链接到/etc/rcX.d-有时是链接/etc/init/rcX.d或类似名称,但应该容易找到/ etc下的某个位置。

如果要在启动脚本的末尾启动某个/etc/rc.local文件,则需要查找该文件,但是如果它取决于已经运行的X11,则可以寻找桌面环境的自动启动选项,或者/etc/X11/Xsession.d/使用与上述类似的模式以上。

如果您依赖于网络正常运行,则有一个单独的目录(if-up.d),以及安装的设备(如外部USB驱动器)/etc/udev/rules.d/


没有为您执行符号链接的命令吗?我以为我想起了类似的事情。
Naftuli Kay 2011年

1
不是吗update-rc.d
Naftuli Kay 2011年

GUI还是命令行?您的DE可能会提供一个标记运行级别,在何处启动或停止脚本的工具。我见过类似的内容,但不记得名称,以及如何指定数字(xy)。
用户未知,

命令行。它为您处理符号链接,并允许您切换是否运行某些脚本。
Naftuli Kay 2011年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.