树莓派I2C相关Node脚本配置@reboot cron任务开机无法运行
树莓派cron @reboot任务不触发排查方案
- 第一步:查看cron运行日志定位报错
树莓派默认cron日志会输出到syslog,执行以下命令过滤相关记录:grep CRON /var/log/syslog
如果日志里提示找不到node、权限报错等信息,可以直接定位问题根因。 - 第二步:补全任务执行上下文
cron执行@reboot任务时不会加载用户的shell配置,也不会默认进入用户家目录,修改任务格式补全上下文:
以上修改会将脚本的标准输出和错误输出都写入@reboot cd /home/pi && /usr/local/bin/node /home/pi/mcp23017.js >> /home/pi/cron_node_log.log 2>&1/home/pi/cron_node_log.log文件,开机后可直接查看日志排查脚本内部错误。
如果你的Node.js是通过nvm安装的,需要用which node命令获取实际的node二进制绝对路径替换任务里的/usr/local/bin/node,nvm的node路径默认不会被cron识别 - 第三步:添加启动延迟
mcp23017依赖i2c硬件驱动服务,cron的@reboot任务会在系统启动早期执行,此时可能i2c、GPIO相关服务还未初始化完成,可添加延迟等待服务就绪:@reboot sleep 15 && cd /home/pi && /usr/local/bin/node /home/pi/mcp23017.js >> /home/pi/cron_node_log.log 2>&1 - 第四步:检查权限配置
确认执行crontab的用户对以下内容有对应权限:- 对
/usr/local/bin/node有执行权限 - 对
/home/pi/mcp23017.js有读权限 - 若为pi用户执行任务,确认pi在gpio用户组中,执行
groups pi查看,不在的话执行sudo usermod -aG gpio pi添加
- 对
- 第五步:确认cron服务状态
执行以下命令确认cron服务已设置开机自启:sudo systemctl is-enabled cron
若返回disabled,执行sudo systemctl enable --now cron开启服务。
内容的提问来源于stack exchange,提问作者Andriansah
相关产品推荐
相关产品推荐

