跳转到内容

计划任务 ​

完成后,你能在 Web 界面里让 NAS 按时执行任意命令或脚本,把输出发到邮箱,能手动运行一次看结果;也知道 OMV 里各个功能的「计划」分别在哪里配置,不会让备份、校验和自检挤在同一时刻。

OMV 的计划任务就是 cron。界面是 cron 的前端:你填的内容会被写成 cron 条目,和命令行里自己写的 cron 效果一样。

入口和列表 ​

打开 系统 → 计划任务(System → Scheduled Tasks)。表格有 已启动、调度(用人话描述的执行时间)、用户、命令、标签 几列。工具栏有 创建、编辑、运行(Run)和 删除。

创建一个任务 ​

点 创建,填写这些字段:

字段说明
已启动默认勾选
执行的时间(Time of execution)特定日期(Certain date)、每小时、每天、每周、每月、每年、在重启时
分、小时、月内第几天、月、周内第几天只有选了「特定日期」才可填;都是多选列表,* 表示每一个
每 N 分钟、每 N 小时、每月每N天复选框,只有对应字段恰好选了一个值、并且不是 * 时才能勾选
用户(User)默认 root,可以选其他系统账号和 OMV 用户
命令(Command)要执行的命令或脚本
命令输出用 Email 发送默认关闭。输出发给执行任务的用户;用户是 root 时,发到通知设置里配置的收件人,需要先配置邮件通知
标签自己备注用

保存后,点页面顶部黄色提示条上的 应用,任务才会真正生效。

时间怎么写 ​

想要设置
每天 03:30分选 30,小时选 3,其余保持 *
每周日 04:00分选 0,小时选 4,周内第几天选星期日
每月 1 日 02:00分选 0,小时选 2,月内第几天选 1
每 15 分钟分选 15,勾选「每 N 分钟」
工作日 02:00周内第几天多选星期一到星期五

界面不支持范围写法(如 1-5),要用多选。每小时、每天、每周、每月、每年 是 cron 的 @hourly、@daily 等固定时刻:整点、每天 0 点、每周日 0 点、每月 1 日 0 点、每年 1 月 1 日 0 点。机器在那个时刻没开机,这次任务就不会运行。不是 24 小时开机的 NAS 请用具体时间,或者安装 omv-extras 的 anacron 插件,见小工具合集。

执行时间按系统时区计算,时区在 系统 → 日期和时间(System → Date & Time)里设置,见时间、时区与主机名。

命令怎么写 ​

  • 命令被写进一个脚本,用 /bin/sh 执行,不是 bash。不要用 bash 专有的写法;需要的话写成一个 bash 脚本,在这里调用它的路径。
  • 用绝对路径,例如 /usr/bin/rsync,不要依赖 PATH。
  • 命令很长或有多行,就写成脚本放在共享文件夹里,或者用 omv-extras 的 scripts 插件管理,见 scripts 插件,任务里只写脚本路径。
  • 命令里的 % 可以直接写,不需要像手写 crontab 那样转义。
  • 输出默认被丢弃。想留下记录,要么勾选发送邮件,要么自己把输出追加到文件,例如命令末尾加 >> <日志文件> 2>&1。
  • 先在 shell 里手动跑通,再建任务。

任务以所选用户运行

默认是 root,权限最大,写错一个路径就可能删掉不该删的东西。能用普通用户完成的任务就别用 root;带变量的删除命令,先单独验证变量不为空。

手动运行 ​

选中任务,点 运行,会弹出「运行计划任务」对话框,显示命令的输出,用来确认命令本身没问题。手动运行和计划运行用的是同一个脚本,所以刚创建或改过的任务要先应用,否则 OMV 会提示配置已更改,不让运行。

各功能的计划分别在哪里 ​

OMV 里不止这一个地方有计划:

功能计划在哪里配置
你自己写的命令系统 → 计划任务
rsync 任务服务 → Rsync → 任务(Services → Rsync → Tasks),见rsync 任务
S.M.A.R.T. 自检存储器 → S.M.A.R.T. → 计划任务(Storage → S.M.A.R.T. → Scheduled Tasks),见 S.M.A.R.T.
定时重启、关机、待机系统 → 电源管理 → 计划任务(System → Power Management → Scheduled Tasks),见电源管理
共享文件夹快照共享文件夹的快照页面,也会出现在 系统 → 计划任务 里,见快照
系统盘备份系统 → 备份 → 计划任务(System → Backup → Schedule),也在 系统 → 计划任务 里,见备份系统盘
Compose 备份与更新服务 → Compose → 计划(Services → Compose → Schedule),见更新与备份容器
scripts 插件服务 → 脚本 → 计划(Services → Scripts → Schedule)
BorgBackup、restic各自的归档或任务页面

另外,OMV 自带一批每小时、每天、每周、每月运行的内置任务,不在界面里:清理旧快照、Btrfs 的错误检查和 scrub、待应用更改和需要重启的邮件提醒、SSL 证书到期检查等。它们的开关和周期靠环境变量调整,不要手改文件。

把任务错开 ​

同一时刻跑太多重任务会互相拖慢,更会影响备份的一致性。一个示例时间表,按你的设备和数据量调整:

时间任务
01:00文件级 rsync 任务、快照
02:00系统盘备份(每周)
03:00SnapRAID 同步或 ZFS、Btrfs scrub
04:00容器备份与更新
周日白天S.M.A.R.T. 长时自检

原则:备份和备份之间、备份和校验(scrub、SnapRAID)之间留出足够间隔,先估一下每个任务要跑多久。 备份期间不要更新软件,更新前先看有没有任务在跑,见系统更新。

配置在哪里 ​

OMV 把任务写在 /etc/cron.d/openmediavault-userdefined,每个任务对应 /var/lib/openmediavault/cron.d/ 下以 userdefined- 开头的脚本。这些文件由 OMV 生成,每次应用都会重写,不要手改。

检查结果 ​

用一个无害的测试任务验证整条链路:

  1. 创建任务:执行的时间选特定日期,分、小时都保持 *(即每分钟),用户 root,命令写 date >> /root/cron-test.log,不勾选邮件。保存并应用。
  2. 选中任务点 运行,对话框里没有报错。
  3. 等两三分钟,在 shell 里 tail /root/cron-test.log,应该有每分钟一行的时间。
  4. 删除这个任务,应用,再删掉 /root/cron-test.log。别让每分钟任务一直留着。

常见问题 ​

任务没有运行。 逐项检查:已启动没勾;保存后没点应用;机器在计划时刻没开机;时间设错了(时区);命令本身有问题,用 运行 手动试一次。

命令手动运行正常,计划运行失败。 多半是环境不同:路径没写绝对、用了 bash 语法、依赖当前目录或交互输入。

没收到邮件。 没配置邮件通知,或没勾选「命令输出用 Email 发送」。命令没有任何输出时不会发邮件。

想每 90 分钟执行一次。 「每 N 小时」是 cron 的 */N 写法,不会跨天对齐,90 分钟这种间隔做不了,用两个任务拆开,或写脚本。

参考资料 ​

  • OMV 官方文档:Scheduled Jobs。
  • 表单和生成的 cron 条目依据 OMV 源码 workbench/src/app/pages/system/cron/ 和 srv/salt/omv/deploy/cron/。

OpenMediaVault 非官方中文使用指南,与 openmediavault 项目及其开发者无隶属关系。