我想安排在晚上 12 点到凌晨 5 点之间进行大量下载。每天凌晨 12 点 wget
应自动从前一天晚上停止的地方继续下载,凌晨 5 点应自动暂停下载,以便第二天晚上继续下载。
我如何在 Ubuntu 中编写此脚本?我需要什么工具?
答案1
组合新贵工作和一个 cron 任务:
首先,创建一个 Upstart 作业。创建一个名为的文件,~/.config/upstart/my-download.conf
其中包含:
description "My download job."
start on resume-download
stop on stop-download
respawn
respawn limit 10 5
script
cd /path/to/download/folder
wget --continue uri://link/to/download
end script
现在,添加一个 cron 作业来启动和停止此 Upstart 作业。运行EDITOR=gedit crontab -e
并添加到文件:
0 0 * * * /sbin/initctl emit resume-download
0 5 * * * /sbin/initctl emit stop-download
您可以随时使用以下方式手动开始下载:
initctl emit resume-download
# or
start my-download
并随时使用以下命令停止它:
initctl emit stop-download
# or
stop my-download
respawn
由于作业中存在,Upstart 会在退出时尝试重新启动。wget
如果它超时并在凌晨两点退出,这将非常有用。设置限制是为了防止 Upstart 无限尝试启动 wget(例如,网络遇到长期问题、下载已完成等)。- 我们
initctl emit
在 cron 作业中添加了命令。这样,如果我们创建更多这样的 Upstart 作业,并且所有作业都在此事件上启动,则此单个 cron 条目就足以启动所有作业。
答案2
您将需要使用--continue
旗帜wget 和 cron 作业。
您可以拥有cron 条目在 12AM 使用超时启动脚本。请参阅 https://serverfault.com/questions/257345/can-i-limit-the-runtime-of-a-cronjob。或者您可以运行另一个脚本,在凌晨 5 点终止/中断它。
每日脚本示例:0 0 * * * timeout -s KILL 5h /path/to/command
上述示例将在每月每天 12:00 am 对 /path/to/command 运行超时,并在 5 小时后向其发送 KILL 信号。
cron 作业的布局如下:
minute (0-59), hour (0-23, 0 = midnight), day (1-31), month (1-12), weekday (0-6, 0 = Sunday) /path/to/command
可以使用星号 (*),以便使用时间段的每个实例(每小时、每个工作日、每月等)。