一个计算机技术爱好者与学习者

0%

Linux后台运行脚本或程序

1. 前言

经常遇到的一个需求,是需要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)。

参考文档:

2. nohup

2.1. 后台执行脚本

1
2
nohup /root/test.sh &
nohup /root/test.sh > test.log 2>&1 &

2.2. 查看后台脚本

1
jobs

2.3. 调到前台

1
fg %2

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

2.4. 放回后台并继续执行

1
2
3
ctrl+Z
jobs
bg %2

2.5. 停止后台脚本

方法一:

1
2
3
jobs
fg %2
ctrl+C

方法二:

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

2.6. 定时任务

通过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 &

3. screen

3.1. 使用新的screen运行脚本

1
screen ./main.sh

3.2. 把当前screen放入后台

ctrl+A+D

3.3. 查看screen

1
screen -ls

3.4. 返回screen

1
screen -r 23500.ttys005.B000000349215A

4. 后记

除了使用nohup和screen之外,想要让程序后台常驻运行,还有两个办法:

  • 本文作者: 好好学习的郝
  • 原文链接: https://www.voidking.com/dev-nohup-and-screen/
  • 版权声明: 本文采用 BY-NC-SA 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~