本文档介绍在 Linux 系统中配置服务开机自启的多种方法,特别针对 CentOS/RHEL 系统。系统支持传统的 SysV init 脚本和现代的 systemd 两种服务管理方式。
特性 SysV init(传统) systemd(现代) 配置文件位置 /etc/init.d/ /etc/systemd/system/ 启动脚本格式 Shell 脚本 .service 单元文件 运行级别 0-6 target(目标) 依赖管理 简单顺序控制 复杂的依赖关系 日志管理 自定义输出 journalctl 统一管理 推荐使用 老系统兼容 新系统(CentOS 7+)
#!/bin/sh # chkconfig: 2345 85 15 # description: 服务描述 # 必须有的头部: # 1. #!/bin/sh # 2. # chkconfig: <运行级别> <启动顺序> <停止顺序> # 3. # description: 服务描述 # 环境变量设置 JAVA_HOME=/opt/jdk-17.0.2 PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME PATH # 服务配置 APP_HOME=/data/app/ JAR_FILE=app.jar LOG_FILE=/data/app/logs/app.log start() { echo "Starting service..." cd $APP_HOME nohup java -jar $JAR_FILE > $LOG_FILE 2>&1 & echo $! > /var/run/app.pid echo "Service started." } stop() { echo "Stopping service..." if [ -f /var/run/app.pid ]; then kill $(cat /var/run/app.pid) rm -f /var/run/app.pid fi echo "Service stopped." } status() { if [ -f /var/run/app.pid ]; then echo "Service is running (PID: $(cat /var/run/app.pid))" else echo "Service is not running" fi } case "$1" in start) start ;; stop) stop ;; restart) stop sleep 3 start ;; status) status ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 esac
# 1. 将脚本放到指定目录 cp app.sh /etc/init.d/ # 或 cp app.sh /etc/rc.d/init.d/ # 2. 添加执行权限 chmod +x /etc/init.d/app.sh # 3. 添加到 chkconfig 管理 chkconfig --add app.sh # 4. 启用开机自启 chkconfig app.sh on # 5. 验证配置 chkconfig --list app.sh
运行级别 名称 说明 0 关机 系统关机状态 1 单用户 救援/维护模式 2 多用户(无NFS) 基本多用户模式 3 完全多用户 标准服务器模式(推荐) 4 未使用 用户可自定义 5 图形界面 带GUI的桌面模式 6 重启 系统重启状态
# /etc/systemd/system/app.service [Unit] Description=My Application Service After=network.target Wants=network.target [Service] Type=simple User=appuser Group=appgroup WorkingDirectory=/data/app ExecStart=/usr/bin/java -jar /data/app/app.jar ExecStop=/bin/kill -15 $MAINPID Restart=on-failure RestartSec=10 # 资源限制 MemoryLimit=1G CPUQuota=50% # 环境变量 Environment="JAVA_HOME=/opt/jdk-17.0.2" Environment="PATH=$JAVA_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin" # 日志配置 StandardOutput=journal StandardError=journal SyslogIdentifier=app-service [Install] WantedBy=multi-user.target
# 1. 创建服务文件 vim /etc/systemd/system/app.service # 2. 重新加载 systemd 配置 systemctl daemon-reload # 3. 启用开机自启 systemctl enable app.service # 4. 启动服务 systemctl start app.service # 5. 验证状态 systemctl status app.service systemctl is-enabled app.service
# 启动服务 systemctl start app # 停止服务 systemctl stop app # 重启服务 systemctl restart app # 查看状态 systemctl status app # 查看日志 journalctl -u app -f journalctl -u app --since "2024-01-01" --until "2024-01-02" # 禁用开机自启 systemctl disable app # 启用开机自启 systemctl enable app # 重新加载配置文件 systemctl daemon-reload systemctl restart app
本文作者:小白
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!