终端可正常运行的sh脚本无法通过crontab执行,求问题排查
问题排查与解决
脚本执行方式错误:你的
run-node.sh首行指定了#!/usr/bin/env node,说明这是Node.js脚本而非Shell脚本,但你在crontab里用sh调用它,会导致解析逻辑混乱。应该直接执行脚本(前提是已添加可执行权限),而非通过sh启动。路径大小写不匹配:终端执行时用的是大写开头的
Documents,但crontab里写的是小写documents。尽管macOS默认文件系统大小写不敏感,但cron环境可能严格校验路径大小写,必须保证两处路径完全一致。脚本缺少可执行权限:如果脚本没有可执行权限,cron无法正常运行它。执行以下命令添加权限:
chmod +x /users/<my username>/Documents/work/cron-test/run-node.shCron环境变量不足:Cron的默认PATH范围远小于终端,可能找不到
node命令的位置。解决方法有两种:- 在终端执行
which node获取node的绝对路径(比如/usr/local/bin/node),修改脚本内容:#!/usr/bin/env node /usr/local/bin/node /users/<my username>/Documents/work/cron-test/server.js - 在crontab开头指定包含
node的PATH:PATH=/usr/local/bin:/usr/bin:/bin * * * * * /users/<my username>/Documents/work/cron-test/run-node.sh >> /users/<my username>/Documents/cron.log 2>&1
- 在终端执行
日志路径大小写错误:crontab里的日志路径同样要改成大写
Documents,确保日志能正常生成,方便后续排查问题。
内容的提问来源于stack exchange,提问作者Exoriri
相关产品推荐
相关产品推荐

