安排每天在一天的特定时间段内恢复大量下载?

安排每天在一天的特定时间段内恢复大量下载?

我想安排在晚上 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

  1. respawn由于作业中存在,Upstart 会在退出时尝试重新启动。wget如果它超时并在凌晨两点退出,这将非常有用。设置限制是为了防止 Upstart 无限尝试启动 wget(例如,网络遇到长期问题、下载已完成等)。
  2. 我们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

可以使用星号 (*),以便使用时间段的每个实例(每小时、每个工作日、每月等)。

相关内容