首页 > 解决方案 > 通过脚本运行进程时,作业命令结果为空

问题描述

我需要通过 shell 脚本在后台运行 rsync,但是一旦启动,我需要通过 shell 监视该作业的状态。

jobs命令在脚本退出后在 shell 中运行时返回空。ps -ef | grep rsync表明 rsync 仍在运行。

我可以通过脚本检查状态,但我需要多次运行脚本,所以它使用不同的ip.txt文件来推送。所以我不能让脚本运行来检查jobs状态。

这是脚本:

for i in `cat $ip.txt`; do
     rsync -avzh $directory/ user@"$i":/cygdrive/c/test/$directory 2>&1 > /dev/null &
done
jobs; #shows the jobs status while in the shell script.
exit 1

jobsshell脚本退出后,命令输出为空:

root@host001:~# jobs
root@host001:~# 

可能是什么原因,我如何获得在后台运行jobs时的状态?rsync我在网上找不到与此相关的文章。

标签: bashshellscriptingjobs

解决方案


由于您的外壳(您从中执行的外壳jobs)没有启动rsync,因此它对它一无所知。有不同的方法可以解决这个问题,但归结为从你的 shell 启动后台进程。例如,您可以使用sourceBASH 命令启动您拥有的脚本,而不是在单独的进程中执行它。当然,您必须exit 1在最后删除,否则会退出您的外壳。


推荐阅读