跳转到内容

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 scriptsroot、root脚本文件的属主和属组
Permissions of scripts700脚本文件的权限,只有属主能读写执行
Period of service log retention每周轮转插件自身日志的轮转周期
Number of separate compressed logs to keep12保留多少份压缩日志
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)。初始化会清除所有历史,对话框里有确认提示。初始化之后,插件在你增删改脚本时会自动提交。

检查结果 ​

  1. 点 检查,提示没有错误。
  2. 点 运行,输出和预期一致,在 日志 标签里能看到这一次运行,退出码是 0。
  3. 创建一个计划,把时间设在几分钟之后(选「特定时间」),到点后在 日志 标签里确认它被执行,再把计划改回你想要的周期。
  4. 在 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 地址添加 下载,不要直接运行。先逐行读,再 检查,最后在测试目录里试。

参考资料 ​

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