0%

Linux后台运行脚本或程序

前言

经常遇到的一个需求,是需要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
2
nohup /root/test.sh &
nohup /root/test.sh > test.log 2>&1 &

查看后台脚本

1
jobs

调到前台

1
fg %2

当执行 fg 将后台的命令调到前台来继续执行时,由于此时系统正处于执行该命令的前台运行状态,此时不能直接再调回到后台执行。需要先把前台运行的命令挂起,再用 bg 命令恢复执行,命令才会调至后台继续执行。

放回后台并继续执行

1
2
3
ctrl+Z
jobs
bg %2

停止后台脚本

方法一:

1
2
3
jobs
fg %2
ctrl+C

方法二:

1
2
ps -ef | grep test.sh
kill -9 $PID

定时任务

通过crontab设置定时任务时,nohup命令可以省略。例如:

1
2
#0 12 * * * nohup /home/voidking/restart.sh > /home/voidking/log/daily-`date +\%Y\%m\%d\%H\%M\%S`.log 2>&1 &
0 12 * * * /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
  • 本文作者: 好好学习的郝
  • 本文链接: https://www.voidking.com/dev-nohup-and-screen/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!源站会及时更新知识点及修正错误,阅读体验也更好。欢迎分享,欢迎收藏~