使用 nohup 实现后台持久化运行

使用 nohup 结合重定向可以让命令在 SSH 断开后继续运行:

nohup your_command > output.log 2>&1 &

关键点说明:

  • > 将标准输出重定向到文件
  • 2>&1 将标准错误合并到标准输出
  • & 让命令在后台运行

输出日志管理

合理管理输出日志可避免磁盘空间耗尽:

nohup your_command > output_$(date +%Y%m%d).log 2>&1 &

日志轮转方案:

# 使用 logrotate 配置
/var/log/output.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
}

进程监控与自动恢复

结合 supervisor 实现进程监控:

[program:your_service]
command=/path/to/your_command
autostart=true
autorestart=true
stderr_logfile=/var/log/your_service.err.log
stdout_logfile=/var/log/your_service.out.log

安全权限配置

最小权限原则执行:

sudo -u limited_user nohup your_command > output.log 2>&1 &

关键安全措施:

  • 使用专用低权限用户运行
  • 限制命令的文件系统访问权限
  • 定期审查日志中的异常

系统资源限制

防止单个进程耗尽资源:

ulimit -v 2000000  # 限制虚拟内存为2GB
nohup your_command > output.log 2>&1 &

推荐配置:

  • 使用 cgroups 限制 CPU/内存
  • 设置合理的 ulimit 值
  • 监控进程资源使用情况

优雅终止方案

提供安全的停止方式:

# 保存 PID 到文件
echo $! > /var/run/your_service.pid

# 停止时使用
kill -TERM $(cat /var/run/your_service.pid)

终止最佳实践:

  • 使用 SIGTERM 而非 SIGKILL
  • 实现清理逻辑的 trap 处理
  • 提供停止脚本接口

网络服务额外考量

针对网络服务的特殊配置:

nohup your_command > output.log 2>&1 &
disown -h %1

网络服务要点:

  • 使用防火墙限制访问IP
  • 配置合理的超时参数
  • 实现健康检查端点

更多推荐