xmlns="http://www.w3.org/2000/svg"style="display:类型的服务开机自启一、概述/etc/init.d/是SysV运行级别对应的目录/etc/rc0.d/#多用户模式(无网络)/etc/rc3.d/#完整多用户模式(文本界面)/etc/rc4.d/#图形界面模式/etc/rc6.d/#符号链接命名规则启动脚本:S<数字><服务名>(例如S90myapp)停止脚本:K<数字><服务名>(例如K10myapp)数字范围通常00-99,数字越小执行越早。3.确保脚本有执行权限chmod+x在运行级别创建启动链接cd/etc/rc2.dln-s../init.d/myappS90myappcd/etc/rc3.dln-s../init.d/myappS90myappcd/etc/rc4.dln-s../init.d/myappS90myappcd/etc/rc5.dln-s../init.d/myappS90myapp#创建停止链接cd/etc/rc0.dln-s../init.d/myappK10myappcd/etc/rc1.dln-s../init.d/myappK10myappcd/etc/rc6.dln-s../init.d/myappK10myapp四、init.dchkconfig脚本必须包含特定的头部信息:1.RHEL/CentOS格式#!/bin/bash#chkconfig:/etc/myapp/config#chkconfig脚本内容...2.Debian/Ubuntu格式#!/bin/bash###BEGIN脚本内容...五、完整实战示例示例:创建并设置一个自定义服务1.创建脚本/etc/init.d/myapp#!/bin/bash##myappapplication##chkconfig:libraryif[-f/etc/init.d/functions];***n./etc/init.d/functionsfi#配置APP_NAME="myapp"APP_PATH="/usr/local/bin/$APP_NAME"PID_FILE="/var/run/$APP_NAME.pid"LOG_FILE="/var/log/$APP_NAME.log"start(){echo-n"Starting$APP_NAME:"if[-f$PID_FILE];***necho"Alreadyrunning(PID:$(cat$PID_FILE))"return1fi#启动进程$APP_PATH>$LOG_FILE2>&1&echo$!>$PID_FILEif[$?-eq0];***necho_successelseecho_failurefiecho}stop(){echo-n"Stopping$APP_NAME:"if[!-f$PID_FILE];***necho"Notrunning"return1fikill-TERM$(cat$PID_FILE)rm-f$PID_FILEif[$?-eq0];***necho_successelseecho_failurefiecho}status(){if[-f$PID_FILE];***necho"$APP_NAMEisrunning(PID:$(cat$PID_FILE))"elseecho"$APP_NAMEisstopped"fi}case"$1"instart)start;;stop)stop;;restart)stopsleep2start;;status)status;;*)echo"Usage:$0{start|stop|restart|status}"exit1;;esacexit02.设置权限chmod+x/etc/init.d/myapp3.RHEL/CentOS上设置开机自启#添加到管理chkconfig--addmyapp#设置开机自启chkconfigmyappon#验证chkconfig--listmyapp4.Debian/Ubuntu上设置开机自启#initstart902345.stop10016.#/etc/rc?.d/*myapp*六、验证开机自启设置1.查看所有运行级别的链接ls-la/etc/rc[0-6].d/*|grepmyapp#/etc/rc3.d/*myapp*2.chkconfigRHEL/CentOSchkconfig--list|grepmyapp#或直接查看chkconfig--listsystemctlsystemd)#systemdmyapp七、常见问题解决1.“servicechkconfig”原因:init脚本缺少头部信息解决:在脚本开头添加#chkconfig:description2.“insserv:tags”原因:缺少LSB头部信息解决:添加LSB检查脚本语法bash-n查看错误日志tail-f/var/log/messagestail-f/var/log/syslog八、现代systemd单元ls/etc/init.d/myapp#systemdsystemctlenablemyappsystemctl单元文件cat>/etc/systemd/system/myapp.service<<EOF[Unit]ExecStart=/etc/init.d/myappstartExecReload=/etc/init.d/myapprestartsystemctlenablemyappsystemctlmyapp九、最佳实践建议始终添加完整的头部信息,便于管理工具识别测试脚本:确保脚本可以手动运行使用标准函数:利用/etc/init.d/functions提供的一致性输出记录PID:便于管理进程考虑向后兼容:即使使用systemd,也保留脚本作为备选通过以上方法,您可以轻松地在任何Linux系统上设置/etc/init.d/类型的服务开机自启。