在 Debian 上调试 crontab 通常分为确认任务是否执行、查看日志、排查环境变量和权限问题几个步骤。下面按实用顺序说明。
crontab -l
crontab -e
systemctl status cron
如果没运行:
sudo systemctl start cron
sudo systemctl enable cron
Debian 默认使用 rsyslog,cron 日志在:
sudo tail -f /var/log/syslog | grep CRON
或:
sudo grep CRON /var/log/syslog
你可以看到类似:
CRON[1234]: (user) CMD (/path/to/script.sh)
✅ 有记录 → cron 执行了
❌ 没记录 → cron 没触发(时间/服务问题)
cron 的环境非常干净:
PATH=/usr/bin:/bin
没有你 shell 里的 PATH、HOME、PYTHONPATH 等。
✅ 解决方式:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
/usr/bin/python3 /home/user/script.py
cron 会把输出 mail 给用户,但很多系统没配 mail。
✅ 建议重定向输出:
* * * * * /home/user/test.sh >> /home/user/cron.log 2>&1
然后:
tail -f /home/user/cron.log
chmod +x /home/user/test.sh
cat /etc/cron.allow
cat /etc/cron.deny
先放一个测试:
* * * * * echo "cron works $(date)" >> /tmp/cron_test.log
等一分钟:
cat /tmp/cron_test.log
✅ 有内容 → cron 正常
❌ 没内容 → cron 没跑(看服务/日志)
在脚本开头加:
#!/bin/bash
set -x
并把输出重定向到日志,能看到每一步执行。
如果 cron 太难调,可用:
systemctl --user edit --full mytask.timer
如果你愿意,可以把 你的 crontab 内容 + 脚本 + 日志 贴出来,我可以直接帮你定位问题。