我想在午夜运行 rsync 命令,但让它在早上 8 点停止。我该如何安排命令的开始和结束?

我想在午夜运行 rsync 命令,但让它在早上 8 点停止。我该如何安排命令的开始和结束?

我想在午夜运行 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

答案3

最近某个时候rsync 已添加在固定时间停止的论据。

这意味着你现在可以调用

rsync --stop-at 08:00

只要你在午夜通过 cron 开始运行,它就会非常简单地完成你想要的操作。

相关内容