在CentOS中init.d service 开机时自动启动脚本

本文介绍在CentOS系统中实现开机自动启动脚本的两种方法:通过编辑 rc.local 文件及创建 init.d 服务脚本。后者详细展示了如何设置程序路径、PID文件等,并提供了 start、stop 和 restart 的脚本示例。
下面一起来看一段在CentOS中init.d service 开机时自动启动脚本了,其实以前也介绍过,希望对各位有帮助。

方法一,

编辑  /etc/rc.d/rc.local文件

格式为  程序名  程序路径

例如  a.sh  /home/a.sh

第二种方法

只需要将your_prog_name替换为你真正的脚本或执行文件的名称,将prog_path设置为具体的路径即可。

 代码如下复制代码

# vim /etc/init.d/your_prog_name

#!/bin/bash
#
# Comments to support chkconfig
# chkconfig: - 98 02
# description: your_prog_name service script
#
# Source function library.
. /etc/init.d/functions

### Default variables
prog_name="your_prog_name"
prog_path="/usr/bin/${prog_name}"
pidfile="/var/run/${prog_name}.pid"
options="-c your_conf_file"

# Check if requirements are met
[ -x "${prog_path}" ] || exit 1

RETVAL=0

start(){
  echo -n $"Starting $prog_name: "
  daemon $prog_path $options
  RETVAL=$?
  PID=$(pidof ${prog_path})
  [ ! -z "${PID}" ] && echo ${PID} > ${pidfile}
  echo
  [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog_name
  return $RETVAL
}

stop(){
  echo -n $"Shutting down $prog_name: "
  killproc -p ${pidfile}
  RETVAL=$?
  echo
  [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog_name
  return $RETVAL
}

restart() {
  stop
  start
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    restart
    ;;
  status)
    status $prog_path
    RETVAL=$?
    ;;
  *)
    echo $"Usage: $0 {start|stop|restart|status}"
    RETVAL=1
esac

exit $RETVAL
# chmod +x /etc/init.d/your_prog_name
# chkconfig your_prog_name on

<think>我们正在讨论Linux系统中设置自启动脚本的方法,特别是与/etc/init.d相关的配置。根据引用内容,我们可以总结如下:1./etc/init.d目录存放用于管理服务的脚本启动、停止、重启等)。2.传统SysVinit系统使用/etc/init.d中的脚本,并通过运行级别目录(如/etc/rc.d/rc?.d)中的符号链接来控制服务的启动顺序和运行级别。3.虽然现代Linux系统逐渐转向systemd,但/etc/init.d的方式仍然可用,并且在一些场景下(如兼容性)被使用。配置步骤:###1.创建服务脚本在`/etc/init.d`目录下创建一个脚本,例如`myservice`。这个脚本必须遵循特定的格式,通常包括至少`start`,`stop`,`restart`,`status`等参数。示例脚本模板(以守护进程为例):```bash#!/bin/bash#chkconfig:23459010#description:Mycustomservicecase"$1"instart)echo"Startingmyservice"#启动命令/path/to/your/program&;;stop)echo"Stoppingmyservice"#停止命令pkill-f/path/to/your/program;;restart)echo"Restartingmyservice"$0stop$0start;;status)#检查状态ifpgrep-f/path/to/your/program>/dev/null;thenecho"myserviceisrunning"elseecho"myserviceisnotrunning"fi;;*)echo"Usage:$0{start|stop|restart|status}"exit1esacexit0```注意:-`chkconfig`行:`2345`表示在运行级别2,3,4,5下启动,`90`是启动顺序(数字越小优先级越高),`10`是停止顺序(数字越小优先级越高)。-确保脚本有可执行权限:`chmod+x/etc/init.d/myservice`###2.使用chkconfig或update-rc.d添加服务根据Linux发行版不同,使用不同的工具:-对于RedHat/CentOS等使用`chkconfig`:```bashchkconfig--addmyservice#添加服务chkconfigmyserviceon#设置开机自启```-对于Debian/Ubuntu等使用`update-rc.d`:```bashupdate-rc.dmyservicedefaults#使用默认运行级别配置```###3.手动管理服务-启动服务:`/etc/init.d/myservicestart`或`servicemyservicestart`-停止服务:`/etc/init.d/myservicestop`或`servicemyservicestop`-查看状态:`/etc/init.d/myservicestatus`或`servicemyservicestatus`###4.检查运行级别链接添加服务后,系统会在对应的运行级别目录(如`/etc/rc.d/rc2.d`,`/etc/rc.d/rc3.d`等)中创建以`S`开头的启动链接和以`K`开头的停止链接。###注意事项-随着systemd的普及,建议新的服务使用systemd单元文件(.service)进行管理,但传统脚本方式在兼容性场景下仍有价值。-引用[3]提到:`/etc/init.d`和`/etc/rc.d/rc.local`的区别。`rc.local`是在所有服务启动后执行,适合简单的自定义命令,而`/etc/init.d`提供更完整的服务管理功能。-引用[4]提醒:如果修改了根文件系统中的启动脚本(如`/etc/init.d/rcS`),需要确保修改是在制作根文件系统进行的,否则重启后会被覆盖。###示例:设置一个简单的自启动脚本假设我们有一个程序`/usr/local/bin/mydaemon`,需要设置为开机启动。步骤:1.创建脚本`/etc/init.d/mydaemon`(内容参考上面的模板)2.赋予执行权限:`chmod+x/etc/init.d/mydaemon`3.添加到启动项:-CentOS:`chkconfig--addmydaemon&&chkconfigmydaemonon`-Ubuntu:`update-rc.dmydaemondefaults`4.测试:`servicemydaemonstart`,然后重启系统验证。###相关问题1.如何检查服务是否已经成功添加到自启动?2.如何移除一个自启动服务?3.如何查看当前系统有哪些自启动服务?4.在systemd系统中如何管理自启动服务?希望这些信息能帮助你配置/etc/init.d自启动脚本。</think>### Linux 设置 `/etc/init.d` 自启动脚本配置方法 在 Linux 系统中,`/etc/init.d` 目录用于存放 **SysV init 风格的服务管理脚本**,这些脚本控制服务的启动、停止和重启。以下是完整的配置步骤: --- #### 一、创建服务脚本 1. **在 `/etc/init.d` 下新建脚本文件**(需 root 权限) ```bash sudo vi /etc/init.d/my_service ``` 2. **脚本基础结构**(必须包含以下关键部分): ```bash #!/bin/bash ### BEGIN INIT INFO # Provides: my_service # 服务名称 # Required-Start: $network $syslog # 依赖服务 # Required-Stop: $network $syslog # Default-Start: 2 3 4 5 # 启用运行级别(2~5) # Default-Stop: 0 1 6 # 禁用运行级别(0,1,6) # Short-Description: My custom service ### END INIT INFO case "$1" in start) echo "Starting my_service..." /path/to/your/command start # 替换为实际启动命令 ;; stop) echo "Stopping my_service..." /path/to/your/command stop # 替换为实际停止命令 ;; restart|reload) $0 stop && $0 start # 重启逻辑 ;; status) # 状态检查逻辑(可选) ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 esac exit 0 ``` 3. **赋予执行权限** ```bash sudo chmod +x /etc/init.d/my_service ``` --- #### 二、注册为系统服务 使用工具将脚本链接到各运行级别的启动目录: 1. **Debian/Ubuntu**(使用 `update-rc.d`) ```bash sudo update-rc.d my_service defaults # 默认运行级别 ``` 2. **RHEL/CentOS**(使用 `chkconfig`) ```bash sudo chkconfig --add my_service # 添加服务 sudo chkconfig my_service on # 启用自启动 ``` --- #### 三、管理服务命令 - 启动服务: ```bash sudo service my_service start # 或 /etc/init.d/my_service start ``` - 停止服务: ```bash sudo service my_service stop ``` - 检查状态: ```bash sudo service my_service status ``` --- #### 四、关键注意事项 1. **运行级别(Runlevel)** - 常见运行级别: - `0`:关机 - `1`:单用户模式 - `2~5`:多用户模式(默认启用级别) - `6`:重启 - 脚本中的 `Default-Start` 需指定为 `2 3 4 5`[^3]。 2. **依赖关系** 在 `Required-Start` 中声明依赖服务(如 `$network` 需网络就绪后启动),避免启动顺序问题。 3. **与 `/etc/rc.local` 的区别** - `/etc/init.d`:提供完整服务管理(启/停/重启),适合复杂服务[^3] - `/etc/rc.local`:仅执行简单命令(在所有服务启动后运行)[^3] 4. **根文件系统限制** 若脚本在只读根文件系统(如嵌入式设备),需在**制作文件系统**修改脚本,否则重启后失效[^4]。 --- #### 五、验证自启动 重启系统后检查: ```bash # 查看服务是否在运行 service my_service status # 检查运行级别链接(示例) ls -l /etc/rc*.d/*my_service # 应显示 S 开头的链接(如 S99my_service) ``` --- ### 相关问题 1. 如何查看 Linux 系统当前的运行级别? 2. `/etc/init.d` 脚本和 `systemd` 服务单元有何区别? 3. 如何调试启动失败的 `/etc/init.d` 脚本? 4. 在只读文件系统中如何持久化修改启动脚本?[^4] [^1]: 在Linux系统中 `/etc/init.d` 存放服务管理脚本,用于控制服务的启动、停止和重启。 [^2]: 自启动服务需在 `/etc/init.d` 下创建脚本并通过工具注册。 [^3]: `/etc/init.d` 提供完整的服务管理功能,按运行级别激活,而 `rc.local` 仅执行简单命令。 [^4]: 对于只读根文件系统(如嵌入式 Linux),启动脚本需在制作文件系统修改,否则重启后恢复原状。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值