BASH问题:CRONTAB命令拼接目录与生成文件名时报错
解决Crontab中命令输出写入指定目录日志文件的报错问题
报错原因
- 目标目录不存在:
/var/log/cron/目录可能未创建,crontab执行时不会自动生成缺失的目录。 - 路径写法错误:原命令中用单引号包裹目录部分,导致后续的
date命令替换无法被shell解析;同时文件名包含空格,未正确包裹整个路径引发解析错误。
解决方案
步骤1:确保目标目录存在
先手动创建目录(若已存在可跳过):
mkdir -p /var/log/cron
如果需要在crontab中自动确保目录存在,可将创建目录的命令与执行命令合并:
mkdir -p /var/log/cron && php artisan mycommand:test >> "/var/log/cron/$(date +"%Y-%m-%d %H:%M:%S").log"
步骤2:修正日志路径的写法
推荐使用$()代替反引号(更易读且避免嵌套问题),并用双引号包裹整个路径,确保shell能正确解析命令替换和空格:
php artisan mycommand:test >> "/var/log/cron/$(date +"%Y-%m-%d %H:%M:%S").log"
如果你的需求是每日一个日志文件(而非每次执行生成带时分秒的文件),可以简化为:
php artisan mycommand:test >> "/var/log/cron/command-logs-$(date +"%Y-%m-%d").log"
额外注意事项
crontab的环境变量PATH通常比较有限,建议使用php的绝对路径(比如/usr/bin/php),避免因找不到php命令导致执行失败:
/usr/bin/php /path/to/your/project/artisan mycommand:test >> "/var/log/cron/command-logs-$(date +"%Y-%m-%d").log"
内容的提问来源于stack exchange,提问作者herostoky
相关产品推荐
相关产品推荐

