我需要运行需要很长时间才能执行的脚本,或者我只是希望它永远运行下去。我不能直接通过 SSH 连接到我的机器,因为当我断开连接时它就会停止运行。
有没有什么方法可以运行不依赖于启动它的 shell 的脚本?
我正在使用 Ubuntu 9.04。
答案1
您可以在运行该命令之前使用 nohup 命令。您也可以在“screen”中运行它,这将允许您重新连接终端。
例如:
ssh mySever 'nohup bash myscript.sh'
或者直接 ssh 进入并运行 nohup 命令。即使您断开连接,它也应该继续运行。这是因为 nohup 将拦截 SIGHUP 信号(挂断)。
Screen 有点复杂,但是花 20 分钟学习基础知识就可知道,它是最有用的工具之一。 这是一个教程。
答案2
我总是只使用 nohup。如果我关心输出,我会将其重定向到日志文件,否则我会将其发送到 /dev/null。
例子:
nohup scp file.tar.gz root@someserver:/var/tmp > /dev/null 2>&1 &
这会将其置于后台,输出将转到 /dev/null,如果您注销,它将不受 HUP 信号的影响。您还可以使用某些 shell(如 bash)“放弃”该作业,以便它不与您的会话连接。
disown %1
答案3
安装屏幕:apt-get install screen
然后使用简单命令启动:screen
并man screen
获取按键绑定。
答案4
琐事: 命令名称nohup
来自“hang-up”,就像挂断电话一样(当然是“黑色,旋转拨号”......)将耳机从柔软的支架上取下后,在 110 波特电传打字机上拨打电话。通常,当 Unix 检测到您“挂断电话”时,它会SIGHUP
向该进程发送一个信号。