我正在尝试将远程服务器的内容复制到本地计算机。这是我使用的命令:
nohup rsync -chavP -e 'ssh -p 23' --stats user@ipaddress:~/great/stuff /volume1/code > ~/rsynclog &
我对上述命令的理解是,它应该创建一个守护进程 ( nohup &
),该进程与我的终端会话完全断开连接。这样,我应该能够安全地关闭我的终端,并让进程继续顺利运行。
该进程确实按预期启动。但是,如果我关闭终端会话,该进程将不再显示在 中ps aux | grep rsync
。正如您在 rsynclog 中看到的那样,该进程显然已终止:
receiving incremental file list
Killed by signal 1.
rsync error: unexplained error (code 255) at rsync.c(615) [Receiver=3.0.9]
这是因为我关闭了终端而导致的。如果我让终端打开几个小时,rsync 就可以正常工作。但是,一旦我关闭它,进程就会终止。
是否有人对此有足够的了解,nohup
可以解释为什么它似乎在这里不起作用?我正在使用 创建终端PuTTY
,Windows
但我也在我的 ubuntu 机器上的终端上尝试过它并得到了相同的结果。
我尝试了一个更简单的测试nohup sleep 100000 &
,它确实有效!但是,我不清楚为什么 rsync 终止时该守护进程仍继续运行...
答案1
使用screen
或tmux
。这不是正确的做法。
答案2
对于长期运行的作业,我也会推荐screen
,但您也可以使用 BASH 内置命令disown
从当前 shell 中删除作业。
# help disown
disown: disown [-h] [-ar] [jobspec ...]
Remove jobs from current shell.
Removes each JOBSPEC argument from the table of active jobs. Without
any JOBSPECs, the shell uses its notion of the current job.
Options:
-a remove all jobs if JOBSPEC is not supplied
-h mark each JOBSPEC so that SIGHUP is not sent to the job if the
shell receives a SIGHUP
-r remove only running jobs
Exit Status:
Returns success unless an invalid option or JOBSPEC is given.
答案3
nohup
不会将进程与其输入终端分离,但该sleep
命令不会从 stdin 读取任何内容,因此它将继续运行,同时rsync
读取 stdin,因此当您关闭终端时,它将与该终端分离并rsync
接收 EOF 或 EIO。
尝试执行,nohup cat &
在nohup.out中也会看到类似的错误。
尝试使用<dev/null
。如果不行,则需要使用screen
。
另请检查https://unix.stackexchange.com/questions/31824/how-to-attach-terminal-to-detached-process