前言
经常遇到的一个需求,是需要Linux后台运行脚本或程序。对于这个需求,有两个最常用的工具:nohup和screen。
nohup - run a command immune to hangups, with output to a non-tty
screen - screen manager with VT100/ANSI terminal emulation
nohup启动一个后台进程,进程的输出输出到非终端。
screen可以在终端中创建和管理多个子终端窗口,通过在子终端窗口中运行程序,实现后台运行的效果。
这两个工具能够实现的功能基本相同。本文中,我们就来学习一下这两个工具的使用方法。
顺便说一下,TTY是电传打字机的缩写,后来发展为虚拟的电子TTY,也就是我们现在说的终端模拟器(terminal emulator)。
参考文档:
nohup
后台执行脚本
1 | nohup /root/test.sh & |
查看后台脚本
1 | jobs |
调到前台
1 | fg %2 |
当执行 fg 将后台的命令调到前台来继续执行时,由于此时系统正处于执行该命令的前台运行状态,此时不能直接再调回到后台执行。需要先把前台运行的命令挂起,再用 bg 命令恢复执行,命令才会调至后台继续执行。
放回后台并继续执行
1 | ctrl+Z |
停止后台脚本
方法一:
1 | jobs |
方法二:
1 | ps -ef | grep test.sh |
定时任务
通过crontab设置定时任务时,nohup命令可以省略。例如:
1 | #0 12 * * * nohup /home/voidking/restart.sh > /home/voidking/log/daily-`date +\%Y\%m\%d\%H\%M\%S`.log 2>&1 & |
screen
使用新的screen运行脚本
1 | screen ./main.sh |
把当前screen放入后台
ctrl+A+D
查看screen
1 | screen -ls |
返回screen
1 | screen -r 23500.ttys005.B000000349215A |