树莓派4 OpenMediaVault定时任务报source not found错误求解
问题核心原因
报错退出码127代表当前运行环境找不到指定命令,结合错误堆栈可直接定位根因:
- OpenMediaVault执行自定义定时任务时,强制指定运行shell为
/bin/sh - 树莓派系统(Raspbian/OMV基于Debian构建)的默认
/bin/sh指向dash轻量shell,而非bash source是bash的专属内置命令,dash shell中不存在该命令,仅支持使用.命令实现等价的脚本加载执行逻辑
可落地解决方案
按修改成本从低到高选择:
- 直接替换定时任务中的执行命令,把
source换为dash兼容的.命令:
原命令:source /srv/dev-disk-by-uuid-e7874961-1866-43e8-9cdb-503276f500b6/Scripts/Scheduled\ Jobs/telegrambot.sh
修改后:. /srv/dev-disk-by-uuid-e7874961-1866-43e8-9cdb-503276f500b6/Scripts/Scheduled\ Jobs/telegrambot.sh
注:.与source功能完全等价,均为在当前shell环境下加载执行脚本,不会改变脚本原有运行逻辑。 - 优化路径写法避免空格解析问题:将原路径中的
\转义替换为全路径加双引号的形式,降低转义失效概率:. "/srv/dev-disk-by-uuid-e7874961-1866-43e8-9cdb-503276f500b6/Scripts/Scheduled Jobs/telegrambot.sh" - 若必须保留
source语法,可在命令最外层显式调用bash解释器运行整个任务:bash -c 'source /srv/dev-disk-by-uuid-e7874961-1866-43e8-9cdb-503276f500b6/Scripts/Scheduled\ Jobs/telegrambot.sh'
注意事项
- 所有命令修改必须在OpenMediaVault WebUI的定时任务配置页面操作,直接修改
/var/lib/openmediavault/cron.d/目录下的生成文件会被系统后续配置重载覆盖,不生效 - 修改保存后可手动触发一次任务验证执行结果,执行成功后不会再返回127退出码
内容的提问来源于stack exchange,提问作者ilMichigan
相关产品推荐
相关产品推荐

