linux后台任务执行

近日迁移服务时,需要执行后台任务。linux执行后台任务的相关命令包括&、nohup、bg等。简单记录,方便速查。

&命令

在命令后面加上&可实现后台运行。使用示例:

sh easeapi.sh &

但仅使用&命令,当关闭控制台终端时,任务同样会被终止。

nohup命令

nohup(no hang up)命令,即忽略SIGHUP信号。nohup能保证关闭控制台终端时,任务不被终止:

nohup sh easeapi.sh &

% ps -ef | grep easeapi
501 20869 1  0  9:35下午 ??  0:00.02 sh easeapi.sh
#kill -9 20869

关闭控制台终端后,通过ps查看,easeapi.sh 的父进程由终端进程变成了init进程,即使关闭终端,任务依然能保持运行。nohup命令默认会在当前目录创建nohup.out文件存储输出信息。如果要输出到指定文件则:

nohup sh easeapi.sh > easeapi.file 2>&1 &

jobs / bg / fg

nohup命令虽然简单,但在一些情况下可能并不好用。比如,想使用scp命令从需要验证的服务端下载文件时,直接使用nohup命令并不会出现验证交互。这种情况下,推荐使用bg/fg命令。

Ctrl + C and Ctrl + Z

Ctrl + C 和 Ctrl + Z是linux中两种中断命令,但作用有不同。Ctrl + C是强制中断进程,而Ctrl + Z则是暂停任务执行。在终端中正常执行scp命令,输入账户密码后,使用Ctrl + Z暂停任务。

jobs命令

jobs命令显示当前任务状态。

[1]  + suspended  sh easeapi.sh

可以看到任务已经暂停,任务编号为1。

bg/fg

bg/fg将可将任务在前后台切换。现在将任务切换到后台:

bg %1

在通过jobs查看,任务状态已变成了running:

[1]  + Running  sh easeapi.sh

当关闭终端后,任务可能会被终止。可使用disown命令忽略SIGHUP信号。

disown -h %1

其它文章

优化Nginx配置提升网站性能
inode用尽导致磁盘空间不足
Let’s Encrypt acme.sh 泛域名证书
阿里云云盘扩容笔记