AWS服务器通过Putty配置双Cron任务:单个任务失效求助
看起来第一个Cron任务能正常跑,说明你的Cron服务本身是没问题的,重点排查第二个任务的细节就好。我给你梳理几个关键排查步骤,按顺序来大概率能解决问题:
先手动验证脚本本身是否正常
先登录服务器,直接在命令行执行php /var/www/html/api/sendmail.php,看看能不能正常运行。如果手动跑都报错,那问题出在脚本本身——比如数据库连接失败、依赖缺失、语法错误之类的,先把脚本本身的问题解决掉。指定PHP的完整路径
Cron的环境变量PATH通常比你登录shell的PATH要窄,有时候会找不到php命令。先执行which php找到PHP的完整路径(比如/usr/bin/php或者/usr/local/bin/php),然后把第二个Cron任务改成:0 23 * * * /usr/bin/php /var/www/html/api/sendmail.php第一个任务能跑可能只是刚好PATH匹配到了,第二个任务换个写法更稳妥。
检查脚本权限与文件所有者
确保Cron运行的用户(比如你当前的登录用户,或者www-data用户)对sendmail.php有读取权限。执行ls -l /var/www/html/api/sendmail.php查看权限,如果所有者是root但Cron用普通用户运行,可能会读不到文件。可以用chown your_username:your_username /var/www/html/api/sendmail.php(替换成你的用户名)或者chmod 644 /var/www/html/api/sendmail.php调整权限。查看Cron日志找线索
AWS服务器的Cron日志位置分系统:- Ubuntu/Debian系统:查看
/var/log/syslog,用grep CRON /var/log/syslog过滤Cron相关日志,看看第二个任务有没有被执行,有没有报错信息(比如command not found或者脚本的错误)。 - Amazon Linux/RHEL系统:查看
/var/log/cron,执行tail -20 /var/log/cron就能看到最近的Cron执行记录。
- Ubuntu/Debian系统:查看
给任务添加日志输出
修改第二个Cron任务,把输出重定向到日志文件,方便排查:0 23 * * * php /var/www/html/api/sendmail.php >> /var/log/sendmail_cron.log 2>&1这样不管是脚本的正常输出还是错误信息都会写到
/var/log/sendmail_cron.log里,第二天查看这个日志就能知道具体哪里出问题了——比如脚本里用了相对路径加载文件,Cron运行时的当前目录是用户的home目录,不是脚本所在目录,这时候要把脚本里的相对路径改成绝对路径(比如include '/var/www/html/api/config.php'而不是include 'config.php')。确认Cron任务的所属用户
你是用哪个用户添加的Cron任务?比如用crontab -e添加的是当前用户的任务,用sudo crontab -u www-data -e添加的是www-data用户的任务。确保两个任务在同一个用户的crontab里,不同用户的环境变量和权限差异可能导致任务运行失败。
按上面的步骤一步步排查,应该能找到第二个任务无法运行的原因并解决它。
内容的提问来源于stack exchange,提问作者Ashish Rana

