linux后台任务执行
原创 2020-11-28
近日迁移服务时,需要执行后台任务。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
相关文章:
使用CDN提升网站访问速度
perl: warning: Setting locale failed.
MAC升级PHP7及Apache错误排查笔记
net::ERR_HTTP2_PROTOCOL_ERROR