bash - 通过脚本运行进程时,作业命令结果为空
问题描述
我需要通过 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
jobs
shell脚本退出后,命令输出为空:
root@host001:~# jobs
root@host001:~#
可能是什么原因,我如何获得在后台运行jobs
时的状态?rsync
我在网上找不到与此相关的文章。
解决方案
由于您的外壳(您从中执行的外壳jobs
)没有启动rsync
,因此它对它一无所知。有不同的方法可以解决这个问题,但归结为从你的 shell 启动后台进程。例如,您可以使用source
BASH 命令启动您拥有的脚本,而不是在单独的进程中执行它。当然,您必须exit 1
在最后删除,否则会退出您的外壳。
推荐阅读
- java - 自动转换为多个域对象的集中式 bean
- c# - 如何在 C# 控制台应用程序中从 Web 服务中获取 JSON 元素来制作交换办公室?
- react-native - onNotificationOpened 和 getInitialNotification 事件没有被触发,因为我使用了自定义启动屏幕
- thymeleaf - 如何通过提交传递 Thymeleaf 中的内部对象?
- fiware - 关于配置设备的 Orion CB 输出
- redis - redis - 杀死谷歌云平台中的 redis-server
- javascript - 减少方法以计算具有特定键的对象值
- python - 在 pyspark 数据框中将非空值填充为 1
- android - Unable to resolve dependency for ':app@debug/compileClasspath': 在 Android Studio 中导入模块时
- python - Django 在服务器上找不到静态文件