Crontab 定时脚本中出现 command not found

原因是cron中仅传递少部分环境变量,如下

LANGUAGE=en_US.utf8:
HOME=/root
LOGNAME=root
PATH=/usr/bin:/bin
LANG=en_US.utf8
SHELL=/bin/sh
PWD=/root

而我想使用的命令文件在 /usr/local/bin/ 目录中,不在默认的环境变量中

解决办法是在定时脚本中加入PATH变量

#!/bin/bash
PATH="/usr/local/bin:/usr/bin:/bin"
# 脚本内容

如果定时任务不是脚本文件,而是命令的话,可以用绝对路径的去执行命令,例如 /snap/bin/certbot ... 这样子。

Crontab 任务不执行原因排查

首先看一下 cron 的任务日志,debian默认在 /var/log/syslog 文件

输入 grep CRON /var/log/syslog 可以看到 cron 的执行情况,如果有运行任务,则会输出这个任务的命令和执行时间

如果没有出现任务命令和时间,则表示没执行过这个任务,那就是 cron 配置错误

如果有,则要看一下是不是任务执行中出错,可以在 cron 中指定一个输出文件,像这样

01 14 * * * /home/joe/myscript >> /home/log/myscript.log 2>&1

这样则 执行脚本的输出信息会到 /home/log/myscript.log 文件。就可以看到是脚本中哪里出错了