使用 nohup 实现后台运行
nohup 命令可以让脚本忽略 SIGHUP 信号,即使终端关闭也能继续执行。基本语法如下:
nohup your_script.sh &
&表示后台运行- 输出默认重定向到
nohup.out,可通过nohup your_script.sh > custom.log 2>&1 &自定义日志路径
结合 systemd 实现服务化管理
通过 systemd 可将脚本转化为守护进程,支持开机自启、日志管理和状态监控。
创建 service 单元文件
在 /etc/systemd/system/ 下新建服务文件(如 my_service.service):
[Unit]
Description=My Persistent Bash Script
[Service]
Type=simple
ExecStart=/path/to/your_script.sh
Restart=always
User=your_username
[Install]
WantedBy=multi-user.target
关键参数说明
Restart=always:进程异常退出时自动重启User:指定运行用户,避免权限问题Type=simple:适用于前台运行的脚本(若需后台脚本,改用forking)
启用并管理服务
systemctl daemon-reload # 重载配置
systemctl start my_service # 启动服务
systemctl enable my_service # 设置开机自启
journalctl -u my_service -f # 查看实时日志
进阶优化建议
- 日志分割:通过
logrotate配置定期切割日志,防止nohup.out或 systemd 日志过大。 - 资源限制:在
service文件中添加MemoryLimit或CPUQuota控制资源占用。 - 依赖管理:利用
[Unit]段的After和Requires设置服务启动顺序。
方案对比
- nohup:简单快捷,适合临时任务,但缺乏监控和自动恢复能力。
- systemd:提供完整的生命周期管理,适合生产环境长期运行。
通过组合两者,既能快速验证脚本功能,又可无缝升级为稳定服务。
885

被折叠的 条评论
为什么被折叠?



