×

使用 nohup 后台执行命令的注意事项-更新用nohup执行多条命令

2022-03-10 12:08:09 Falcon

nohup命令

使用&命令后,作业会被提交到后台运行,当前控制台没有被占用,但是一但把当前控制台关掉(退出帐户时),作业就会停止运行。

nohup命令可以在你退出帐户之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)。该命令的一般形式为:

nohup command &

如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:

nohup command > myout.file 2>&1 &
使用了nohup之后,很多人就这样不管了,其实这样有可能在当前账户非正常退出或者结束的时候,命令还是自己结束了。所以在使用nohup命令后台运行命令之后,需要使用exit正常退出当前账户,这样才能保证命令一直在后台运行。

命令前后台切换的方法:

  • ctrl + z 可以将一个正在前台执行的命令放到后台,并且暂停
  • jobs 查看当前有多少在后台运行的命令
  • fg 将后台中的命令调至前台继续运行
    如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
  • bg 将一个在后台暂停的命令,变成继续执行,如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出。

20220705更新:使用nohup执行多条命令

源自我构建 youtube-dlp 下载时需要做的两个动作,启动 docker 容器下载油管视频到指定位置,下载完成后将文件移动到指定的目录(其实就是挂载的webdav 阿里云网盘或者中国移动网盘)。

在外网找到类似的问题 ,总结一下解决的思路有两种:

第一种是使用 sh -c (或者bash -c) 对命令进行包装 ,多条命令之间以 “&&” 连接,如:

# 因为url可能含有特殊字符,造成安全问题,这种写法比较好
nohup sh -c "wget \"$url\" && wget \"$url2\"" > /dev/null 2>&1 &

另一种写法是把命令写入一个单独的shellscript,用nohup执行

nohup bash command.sh
本文收录于