Cron定时任务配置后无法执行PHP Phar脚本问题咨询
核心错误点
配置存在两个直接导致任务全失败的问题:
- 路径配置错误:crontab中
PHAR变量指向的文件路径为/home/heimathafen/customfiles/scripts/7d2d.phar,但你手动验证可正常运行的文件实际位于/home/homeport/customfiles/scripts/7d2d.phar,两个路径的用户目录段完全不一致,cron无法在错误路径下找到目标文件。 - 变量使用方式错误:你将「php可执行文件 + 启动参数 + phar路径」的完整命令字符串赋值给单个变量,cron解析变量时不会自动做命令分词,会把整个带空格、参数的字符串当做单个可执行文件名查找,即使路径写对也会触发“找不到命令”的报错。
修正后的配置
SHELL=/bin/bash # 拆分变量定义,不要将命令和参数混在同一个变量中 PHP_BIN=/usr/bin/php PHAR_PATH=/home/homeport/customfiles/scripts/7d2d.phar # m h dom mon dow command */15 * * * * ${PHP_BIN} -f ${PHAR_PATH} maintenance */5 * * * * ${PHP_BIN} -f ${PHAR_PATH} monitor #50 3,7,11,15,19,23 * * * ${SDTD} reboot #0 * * * * ${PHP_BIN} -f ${PHAR_PATH} backup #55 23 * * 6 ${PHP_BIN} -f ${PHAR_PATH} creategifts * * * * * ${PHP_BIN} -f ${PHAR_PATH} gameevents 0 * * * * * ( sleep 10; ${PHP_BIN} -f ${PHAR_PATH} gameevents 1) * * * * * ( sleep 20; ${PHP_BIN} -f ${PHAR_PATH} gameevents 2) * * * * * ( sleep 30; ${PHP_BIN} -f ${PHAR_PATH} gameevents 3) * * * * * ( sleep 40; ${PHP_BIN} -f ${PHAR_PATH} gameevents 4) * * * * * ( sleep 50; ${PHP_BIN} -f ${PHAR_PATH} gameevents 5)
补充验证手段
如果修改后任务仍未正常执行,按以下步骤排查:
- 给定时任务追加日志重定向,比如将监控任务改写为
*/5 * * * * ${PHP_BIN} -f ${PHAR_PATH} monitor >> /tmp/7d2d_cron.log 2>&1,所有执行报错、输出都会写入指定日志文件,可直接定位问题。 - 执行对应系统的cron服务状态检查命令:Debian/Ubuntu系运行
systemctl status cron,RHEL/CentOS系运行systemctl status crond,确认cron服务本身处于运行状态。 - 确认homeport用户对phar文件所在的全路径目录有遍历、读取权限,避免因目录权限不足导致无法读取文件。
内容的提问来源于stack exchange,提问作者dwarfmaster
相关产品推荐
相关产品推荐

