我想在午夜运行 rsync 命令,但让它在早上 8 点停止。我该如何安排命令的开始和结束?
我研究过 cronjobs,但它只会在特定时间启动。关于如何结束此过程,您有什么想法吗?我将从 OS X 运行它。我考虑过以新的 ssh 用户身份登录,然后使用 cronjob 启动 bash 脚本来终止该连接,但这似乎有点过度劳累。
答案1
您可以让 shell 脚本将 rsync PID 写入固定位置的文件中。我会通过在后台启动 rsync(附加 &)并使用 来获取 PID $!
。
rsync blah/ remote:blah/ &
echo $! > pidfile
然后早上 8 点的另一个 cron 作业将读取该文件并将结果放入 RSPID。
RSPID=`cat pidfile`
然后运行ps $RSPID | grep rsync
看看它是否还在运行,然后执行kill $RSPID
。
类似这样的一些事情应该可以起作用。
您也可以将 kill 命令放入 shell 脚本中。在后台启动 rsync 并休眠 8 小时,然后终止 rsync。
答案2
添加第二个crontab
条目,在早上 8 点终止进程rsync
。另一个选项是rsync
在后台启动并让脚本循环到早上 8 点,然后再终止进程:
#!/bin/bash
rsync ... &
pid=$!
while /bin/true; do
if [ $(date +%H) -ge 8 ]; then
kill -TERM $pid
exit 0
else
sleep 60
fi
done