如何在特定最大时间后停止脚本?

如何在特定最大时间后停止脚本?

我每天都会备份到 S3。我只想在晚上 8 点到早上 8 点之间使用上传带宽。由于我们的上传速度很差,任何一次运行都可能需要超过 12 小时。我并不担心随意关闭 s3cmd,因为它会在下次运行时正确恢复。

我的 crontab 看起来像这样:

# 0 20 * * * s3cmd sync FOO s3://MyBucket

如果是早上 8 点,我该如何测试并让它停止。理想情况下,我希望我可以做类似的事情:

# 0 20 * * * time --limit 12H "s3cmd sync FOO s3://MyBucket"

我正在使用 Ubuntu Server。

感谢!

编辑:

根据 quanta 的回答。对于多个上传命令,我认为我应该怎么做?

# 0 20 * * * s3cmd sync FOO s3://MyBucket; s3cmd sync BAR s3://MyBucket; s3cmd sync FOOBAR s3://MyBucket;
# 0 8 * * * pkill s3cmd; sleep 1; pkill s3cmd; sleep 1; pkill s3cmd;

编辑:

NM,我更喜欢超时。

编辑:

这是超时解决方案的一个弱点。如果我有 12 个备份要做,并且有 12 小时的时间来完成,我不一定需要为每个备份分配 1 小时。有些备份可能需要 5 小时,有些则需要 20 分钟。我不在乎。我只关心早上 8 点一切都会停止。我不认为超时选项允许这种灵活性来自适应地设置超时值。基于 quanta 答案的 kill 选项应该能够处理这个问题。

答案1

您很可能想要该timeout命令。

timeout 12h s3cmd sync FOO s3://MyBucket

man timeout了解更多信息。

至少在 Fedora 中,它是与“coreutils”包一起安装的,默认情况下您应该拥有该包。

相关内容