在 Debian 上调试 crontab 通常可以按下面几个步骤来做,从“看日志”到“模拟执行”,基本能解决 90% 的问题。
systemctl status cron
如果没运行:
sudo systemctl start cron
sudo systemctl enable cron
Debian 默认使用 rsyslog,cron 日志通常在:
sudo tail -f /var/log/syslog | grep CRON
或(某些版本):
sudo tail -f /var/log/cron.log
如果 没有 cron 日志,需要开启:
sudo nano /etc/rsyslog.conf
确保有这一行(去掉注释):
cron.* /var/log/cron.log
然后:
sudo systemctl restart rsyslog
在 crontab 里加一行测试:
* * * * * echo "cron test $(date)" >> /tmp/cron_test.log
等一分钟看:
cat /tmp/cron_test.log
✅ 有内容 → cron 正常
❌ 没内容 → cron 没运行或用户不对
cron 的环境非常“干净”,没有 PATH、HOME 等。
✅ 正确写法:
* * * * * /usr/bin/python3 /home/user/script.py >> /tmp/log 2>&1
❌ 错误写法:
* * * * * python3 script.py
建议在脚本里写死路径,或在 crontab 顶部加:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
crontab -e → 当前用户/etc/crontab(需要指定用户)* * * * * root /root/script.sh
查看当前用户的任务:
crontab -l
确保脚本可执行:
chmod +x script.sh
env -i /bin/bash --noprofile --norc
然后在里面运行你的命令,看是否报错。
在脚本里加:
set -x
exec >> /tmp/script.log 2>&1
date
systemctl status cron/var/log/syslog | grep CRONecho 测试 cron 是否执行>> log 2>&1如果你愿意,可以把 你的 crontab 内容 + 脚本路径 + 现象 发出来,我可以直接帮你定位问题。