首页 > 解决方案 > 根本无法让 Crontab 工作正常工作

问题描述

新使用 Crontab,我正在尝试运行一个简单的 bash 脚本。

添加温度:

#!/bin/bash

rnd1=$RANDOM
range1=20
let "rnd1 %= $range1"
rnd2=$RANDOM
range2=50
let "rnd2 %= $range2"

echo $rnd1
echo $rnd2

cd /var/www/html

sqlite3 test.db <<EOF

INSERT INTO temps (date, temp) VALUES ($rnd1, $rnd2 );

EOF

crontab -e:

SHELL:/bin/bash

* * * * * /var/www/html/add_temp

这似乎根本没有运行。如果使用 /var/www/html/add_temp 手动运行,则可以正常工作。

标签: linuxbashcron

解决方案


我的猜测是sqlite3cron 守护进程运行脚本时找不到。您可以修改脚本并提供此命令的完整路径名。使用终端显示命令的完整路径名:

type sqlite3

将运行脚本的 cron 守护进程与用于手动运行脚本的 bash 登录 shell 没有完全相同的环境。通常设置不同的变量是PATH

解决这种情况的第一步是比较环境并调试脚本。

我建议在脚本的第一行之后插入这些行

env
set -x

手动运行脚本并从终端重定向输出:

/var/www/html/add_temp >/var/tmp/output_m.txt 2>&1

将 crontab 行更改为:

* * * * * /var/www/html/add_temp >/var/tmp/output_c.txt 2>&1

等待 cron 守护进程执行脚本并比较 /var/tmp/output_m.txt 和 /var/tmp/output_c.txt 文件。

当脚本将被修复时,从脚本中删除 2 个调试行并恢复 crontab 原始内容。


推荐阅读