You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派Debian环境下Domoticz监控脚本控制台正常但Cron任务失效

解决Domoticz监控脚本在Cron/Sudo下的[[: not found]]错误及Cron执行账户说明

先直接给你两个核心问题的答案,再讲具体修复步骤:

1. 为什么会出现[[: not found]]错误?

这个报错是Shell语法兼容性问题导致的:

  • 你脚本里用的[[ ... ]]是Bash独有的扩展条件判断语法,但Debian系默认的/bin/sh是Dash(轻量级POSIX Shell),它不支持[[这种非标准语法。
  • 当通过Cron执行任务时,Cron默认使用/bin/sh来运行脚本(哪怕你脚本开头写了#!/bin/bash,部分场景下Cron的环境会忽略Shebang或用默认Shell解析);而用sudo执行时,如果没有明确指定Shell,也可能因为sudo的环境变量问题,导致脚本没有按预期用Bash运行。

你直接用pi用户运行脚本正常,是因为pi的默认Shell是Bash,会严格按脚本的Shebang指定的解释器执行。

2. 你的Cron任务是以哪个账户执行的?

你配置的Cron任务*/5 * * * * pi /home/pi/...是写在**系统级crontab(/etc/crontab)**里的,这种格式会明确以pi用户身份执行。如果是用crontab -e编辑的用户级crontab,任务会自动以当前编辑的用户(也就是pi)执行,不需要在时间字段后写用户名。


修复方案(两种任选其一)

方案一:改用POSIX兼容的语法(推荐,更通用)

把脚本里的[[替换成POSIX标准的写法,比如用case语句(比grep更高效),避免依赖Bash扩展:

修改后的脚本示例:

#!/bin/bash
echo 'Checking if Domoticz is running.'
DomoticzState=$(service domoticz.sh status)  # 后续会说明如何去掉sudo

case "$DomoticzState" in
    *"active (running)"*)
        echo 'Domoticz is running. Nothing to do.'
        ;;
    *"domoticz is not running ... failed!"*|*"active (exited)"*|*"inactive (dead)"*)
        echo 'Domoticz is not running properly. Restarting Domoticz...'
        service domoticz.sh restart
        echo 'Domoticz restarted.'
        ;;
esac

额外优化:去掉脚本里的sudo

每次执行都用sudo容易引发环境问题,建议给pi用户配置免密执行domoticz服务命令:

  1. 执行sudo visudo打开sudoers配置文件
  2. 添加一行(可通过which service查看实际路径):
    pi ALL=(ALL) NOPASSWD: /usr/sbin/service domoticz.sh status, /usr/sbin/service domoticz.sh restart
    
  3. 保存退出后,脚本里就可以直接用service domoticz.sh ...,不用加sudo了。

方案二:强制Cron和Sudo用Bash执行脚本

如果不想修改脚本语法,直接在Cron任务里明确指定用Bash运行:

*/5 * * * * pi /bin/bash /home/pi/domoticz/scripts/domoticz_state_checker.sh >> /home/pi/domoticz/scripts/domoticz_state_checker.log 2>&1

用sudo执行时,也明确指定Bash:

sudo /bin/bash /home/pi/domoticz/scripts/domoticz_state_checker.sh

这样就能确保脚本用Bash解析,支持[[语法了。

内容的提问来源于stack exchange,提问作者Danny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:51:17