如何通过nohup命令在Ubuntu系统后台高效稳定地运行服务?
- 内容介绍
- 文章标签
- 相关推荐
Ubuntu后台运行服务的痛点
在服务器运维过程中,经常需要让程序在后台持续运行,但常规方法存在以下问题:
- 终端关闭即停止普通方式运行的程序会因为终端关闭而中断
- SSH断开即终止通过SSH连接运行的服务在断开连接后无法保持
- 资源使用情况不当直接在前台运行可能导致程序资源被占用过多
- 输出信息丢失关键的日志和调试信息可能因为终端关闭而丢失
- 进程管理困难没有有效方式监控和管理后台进程状态
nohup命令方法概览
nohup command &
`nohup`命令是Ubuntu程序中实现后台稳定运行服务的利器。它能够:
-
忽略SIGHUP信号- 即使终端关闭或SSH断开,进程仍然保持运行状态 -
自动重定向输出- 默认将标准输出和错误输出保存到nohup.out文件中配合&符号使用- 将进程放入后台执行,释放终端控制权支持日志分离- 可通过重定向指定独立日志文件便于管理轻量级方法- 不需要额外安装任何工具就可以稳定后台运行
bash
echo 'while True: print;time.sleep'> test.py
nohup python test.py> mylog.log 2>&1 &
tail -f mylog.log
nohup java -jar myapp.jar arg1 arg2> app.out 2> app.err &
echo $!> myapp.pid
ps aux | grep nohup | grep -v grep
kill $
rm -f myapp.pid || true
| 特性 | nohup | disown | screen | systemd |
|---|---|---|---|---|
| 依赖安装包 | ❌ | ❌ | ✅ | ✅ |
| 内存使用低 | ✅ | ✅ | ❌ | ❌ |
| 原生支持 | ✅ | ✅ | ❌ | ❌ |
| 自动重启 | ❌ | ❌ | ❌ | ✅ |
'&'符号必须放在命令末尾才能正确放入后台! 按理说,否则会导致无法交互式输入等待!'
说到安全注意事项,
- 避免直接在根目录执行始终在专门目录下操作以防污染程序环境变量
bash
mkdir ~/services && cd $_ # 常用方法示例方法选择技巧
- 限制CPU/内存资源
bash
taskset -c 0-7 nohup nice -n 19 python script.py &
- 清理僵尸进程
bash
ps auxw --sort=-pcpu。-pmem,-etime,-pid,+cmd \
awk '$8=="Z"{print $0}' \
xargs kill -9 || echo "No zombie processes found"
- 设置超时机制
bash
timeout --signal=KILL 7d nohup /path/to/script.sh &
Ubuntu后台运行服务的痛点
在服务器运维过程中,经常需要让程序在后台持续运行,但常规方法存在以下问题:
- 终端关闭即停止普通方式运行的程序会因为终端关闭而中断
- SSH断开即终止通过SSH连接运行的服务在断开连接后无法保持
- 资源使用情况不当直接在前台运行可能导致程序资源被占用过多
- 输出信息丢失关键的日志和调试信息可能因为终端关闭而丢失
- 进程管理困难没有有效方式监控和管理后台进程状态
nohup命令方法概览
nohup command &
`nohup`命令是Ubuntu程序中实现后台稳定运行服务的利器。它能够:
-
忽略SIGHUP信号- 即使终端关闭或SSH断开,进程仍然保持运行状态 -
自动重定向输出- 默认将标准输出和错误输出保存到nohup.out文件中配合&符号使用- 将进程放入后台执行,释放终端控制权支持日志分离- 可通过重定向指定独立日志文件便于管理轻量级方法- 不需要额外安装任何工具就可以稳定后台运行
bash
echo 'while True: print;time.sleep'> test.py
nohup python test.py> mylog.log 2>&1 &
tail -f mylog.log
nohup java -jar myapp.jar arg1 arg2> app.out 2> app.err &
echo $!> myapp.pid
ps aux | grep nohup | grep -v grep
kill $
rm -f myapp.pid || true
| 特性 | nohup | disown | screen | systemd |
|---|---|---|---|---|
| 依赖安装包 | ❌ | ❌ | ✅ | ✅ |
| 内存使用低 | ✅ | ✅ | ❌ | ❌ |
| 原生支持 | ✅ | ✅ | ❌ | ❌ |
| 自动重启 | ❌ | ❌ | ❌ | ✅ |
'&'符号必须放在命令末尾才能正确放入后台! 按理说,否则会导致无法交互式输入等待!'
说到安全注意事项,
- 避免直接在根目录执行始终在专门目录下操作以防污染程序环境变量
bash
mkdir ~/services && cd $_ # 常用方法示例方法选择技巧
- 限制CPU/内存资源
bash
taskset -c 0-7 nohup nice -n 19 python script.py &
- 清理僵尸进程
bash
ps auxw --sort=-pcpu。-pmem,-etime,-pid,+cmd \
awk '$8=="Z"{print $0}' \
xargs kill -9 || echo "No zombie processes found"
- 设置超时机制
bash
timeout --signal=KILL 7d nohup /path/to/script.sh &

