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

eng*_*uan 2 linux bash cron

我正在对 S3 进行每日备份。我只想在晚上 8 点到早上 8 点之间消耗上传带宽。任何个人运行都可能需要超过 12 小时,因为我们的上传很糟糕。我不担心随意杀死 s3cmd 因为它会在下次运行时正确恢复。

我的 crontab 看起来像这样:

# 0 20 * * * s3cmd sync FOO s3://MyBucket
Run Code Online (Sandbox Code Playgroud)

如果是上午 8 点,我如何测试并使其停止。理想情况下,我希望我可以做这样的事情:

# 0 20 * * * time --limit 12H "s3cmd sync FOO s3://MyBucket"
Run Code Online (Sandbox Code Playgroud)

我正在使用 Ubuntu 服务器。

谢谢!

编辑:

基于量子的回答。对于多个上传命令,我认为我应该怎么做?

# 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;
Run Code Online (Sandbox Code Playgroud)

?

编辑:

NM,我更喜欢超时。

编辑:

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

Sir*_*rex 5

您可能需要该timeout命令。

timeout 12h s3cmd sync FOO s3://MyBucket

man timeout 想要查询更多的信息。

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