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

我正在对S3进行每日备份。 我只想从上午8点到上午8点才使用上传带宽。 任何单独的运行可能需要超过12小时,因为我们的上传是蹩脚的。 我不担心任意杀s3cmd,因为它会在下次运行中正确恢复。

我的crontab看起来像这样:

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

上午8点如何testing并停止。 理想情况下,我希望我可以做一些事情:

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

我正在使用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; 

编辑:

NM,我更喜欢超时。

编辑:

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

你可能想要timeout命令。

timeout 12h s3cmd sync FOO s3://MyBucket

man timeout了解更多信息。

至less在Fedora中,这是安装了“coreutils”包,你应该默认。