外观
scripts 插件:在界面里管理脚本
完成后,你可以在 OMV 的界面里写好一个多行脚本,用 shellcheck 检查语法,点一下试运行,再设成按计划自动执行,每次运行的输出都能在界面里回看。
适合谁
- 有多行的维护脚本,例如清理、同步、检查,想有语法检查、运行日志和版本记录。
- 想把脚本和计划放在同一个地方管理。
和 OMV 自带的 系统 → 计划任务(System → Scheduled Tasks)比:计划任务适合一行命令,见 计划任务;脚本一长,放进这个插件更好管理。
脚本以 root 身份运行,能做系统上的任何事
- 影响范围:不管是在界面里点 运行,还是按计划执行,脚本都以 root 运行,可以修改、删除系统上的任何文件,装卸软件,改配置。脚本内容保存在 OMV 的配置数据库里,也有一份副本在你选的共享文件夹里。
- 前置条件:只运行你完全读懂的脚本,来自网上的脚本先逐行审查;先用 检查(Check)和测试参数试运行;删除类命令先在测试目录里演练;不要把密码、令牌直接写进脚本,因为它会出现在数据库、共享文件夹副本和配置备份里;放脚本的共享文件夹不要对别人开放。
- 怎么回退:停用或删除对应的计划,脚本就不再自动运行。脚本造成的改动插件无法撤销,只能靠备份恢复,所以脚本里有删除或覆盖操作前,先确认有可用的备份,见 备份策略。
插件信息
| 项 | 内容 |
|---|---|
| 包名 | openmediavault-scripts |
| 来源 | omv-extras |
| OMV 8 状态 | 截至 2026-10-22 的 omv-extras synchrony 软件源为 8.0.7(amd64、arm64) |
| 菜单位置 | 服务 → 脚本(Services → Scripts),四个标签:设置(Settings)、脚本(Scripts)、计划(Schedule)、日志(Logs) |
| 依赖 | openmediavault-sharerootfs、psmisc、pylint、shellcheck |
先装 omv-extras,再到 系统 → 插件(System → Plugins)里安装。
不要卸载 sharerootfs
安装本插件会连带装上 openmediavault-sharerootfs。卸载它会连带卸载本插件,因为界面里的卸载会自动移除依赖它的插件,见 sharerootfs。
配置与使用
1. 设置
服务 → 脚本 → 设置。以下字段名以界面显示为准,部分没有官方中文译名:
| 字段 | 默认值 | 说明 |
|---|---|---|
| 共享文件夹(Shared folder) | 空 | 必须先设置,脚本才会落盘。这里存的是副本 |
| Owner of scripts、Group of scripts | root、root | 脚本文件的属主和属组 |
| Permissions of scripts | 700 | 脚本文件的权限,只有属主能读写执行 |
| Period of service log retention | 每周轮转 | 插件自身日志的轮转周期 |
| Number of separate compressed logs to keep | 12 | 保留多少份压缩日志 |
| Unit of script log retention、Number of units before delete | 每天、14 | 脚本运行日志保留多久,默认 14 天 |
| Remove empty log files | 关 | 是否删除空的日志文件 |
共享文件夹里的文件由 Salt 在每次部署时重新生成。手改这些文件不会同步回界面,下一次部署还会被覆盖,要改脚本就在界面里改。
2. 添加脚本
服务 → 脚本 → 脚本 → 添加(Add)菜单:
| 项 | 说明 |
|---|---|
| 添加(Add) | 新建通用脚本,字段有名称(Name)、描述、扩展名(Extension,可选 conf、json、ksh、php、sh、txt,默认 sh)、脚本内容(Script)、测试参数(Testing arguments) |
| 添加 Python(Add Python) | 新建 Python 脚本 |
| 从 URL 地址添加(Add from URL) | 从 http 或 https 地址下载脚本,只用于你信任的来源 |
| 导入(Import)、导入一个(Import one) | 从服务器上已有的文件夹或文件导入 |
| 同步文件中的变更(Sync changes from file) | 把你在共享文件夹副本里改过的内容读回数据库 |
名称只能用字母、数字和 _ - . :。脚本内容的第一行要写解释器,例如 #!/bin/sh,插件是直接执行这个文件的,没有 shebang 就无法运行。测试参数只在 脚本 标签里点运行时使用,计划任务不用它。
下面是一个只读、无害的例子,名称 fs-usage,扩展名 sh:
sh
#!/bin/sh
# 输出各数据盘的使用情况,输出会被插件保存到运行日志里
date '+%F %T'
df -h --output=target,size,used,pcent -x tmpfs -x devtmpfs | grep -E '^(Mounted on|/srv/)'3. 检查和试运行
选中脚本,点工具栏的 检查(Check):sh、ksh 用 shellcheck,Python 用 pylint,php 用 php -l,其他类型提示没有检查器,不会去执行文件本身。再点 运行(Run),在对话框里看输出。
运行对话框只显示输出,用 dialog 之类的交互界面的脚本不能在这里使用。
4. 设成计划
服务 → 脚本 → 计划 → 创建(Create):
| 字段 | 说明 |
|---|---|
| 已启动 | 默认勾选 |
| 脚本(Script) | 选一个已创建的脚本 |
| 脚本参数(Script arguments) | 可选 |
| 执行的时间(Time of execution) | 特定时间(Certain date)、每小时、每天、每周(默认)、每月、每年、重启时(At reboot)。选「特定时间」才能填分钟、小时、日期等 |
| 命令输出用 Email 发送(Send command output via email) | 需要先在 系统 → 通知(System → Notification)配好邮件,见 配置邮件通知 |
| 只在出错时发送 | 勾选发送邮件后可用,只在脚本退出码非 0 时才发 |
| 注释(Comment) | 标签,也会用在邮件标题里 |
按计划运行的任务写在 /etc/cron.d/omv-scripts-jobs 里,以 root 运行,由插件的包装程序 omv-scripts-exec-wrapper 启动并记录。
5. 看日志
服务 → 脚本 → 日志 列出每一次运行:开始和结束时间、脚本名、退出码、耗时。可以查看每次运行的完整输出。
6. 可选:用 Git 记录改动
脚本 标签的 Git 菜单里有 初始化新 git 源(init git repo)和 显示文件变更(show file changes)。初始化会清除所有历史,对话框里有确认提示。初始化之后,插件在你增删改脚本时会自动提交。
检查结果
- 点 检查,提示没有错误。
- 点 运行,输出和预期一致,在 日志 标签里能看到这一次运行,退出码是 0。
- 创建一个计划,把时间设在几分钟之后(选「特定时间」),到点后在 日志 标签里确认它被执行,再把计划改回你想要的周期。
- 在 OMV 的 shell(root)里,只读确认文件和计划:
sh
# 在 OMV 的 shell 里执行(root)
ls -l <共享文件夹路径>/fs-usage.sh # 权限应为 -rwx------,属主 root
cat /etc/cron.d/omv-scripts-jobs # 能看到你创建的计划备份与维护
- 脚本内容在 OMV 的配置数据库(
config.xml)里,共享文件夹里的是副本。备份config.xml或共享文件夹之一,就能恢复脚本,见 OMV 配置怎么留底。 - 脚本运行日志在
/var/log/omv-scripts-exec-tracker/,按设置里的保留策略自动清理。 - 更新插件后,旧的计划依然有效。升级大版本前,把脚本和计划记在文档里。
- 卸载插件:数据库里的脚本和计划随之删除,共享文件夹里的副本不一定会被清理,卸载前先导出。
常见问题
运行时提示权限不够或无法执行。 最常见的原因是脚本第一行没有写解释器;其次检查共享文件夹里的副本权限是不是被改过,插件默认是 700。
我在共享文件夹里改了脚本,界面里没变。 副本不会自动同步回来。用 同步文件中的变更,或者以后只在界面里改。
计划没有按时运行。 先确认计划和脚本都是已启动,再看 /etc/cron.d/omv-scripts-jobs,然后看 日志 标签里有没有记录。
邮件没有收到。 通知本身没配好,见 配置邮件通知。
想从网上拿一个脚本来用。 用 从 URL 地址添加 下载,不要直接运行。先逐行读,再 检查,最后在测试目录里试。
参考资料
- omv-extras wiki:Scripts Plugin For OMV8
- 插件源码:openmediavault-scripts