外观
计划任务
完成后,你能在 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:00 | SnapRAID 同步或 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 生成,每次应用都会重写,不要手改。
检查结果
用一个无害的测试任务验证整条链路:
- 创建任务:执行的时间选特定日期,分、小时都保持
*(即每分钟),用户 root,命令写date >> /root/cron-test.log,不勾选邮件。保存并应用。 - 选中任务点 运行,对话框里没有报错。
- 等两三分钟,在 shell 里
tail /root/cron-test.log,应该有每分钟一行的时间。 - 删除这个任务,应用,再删掉
/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/。