linux - 根本无法让 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 手动运行,则可以正常工作。
解决方案
我的猜测是sqlite3
cron 守护进程运行脚本时找不到。您可以修改脚本并提供此命令的完整路径名。使用终端显示命令的完整路径名:
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 原始内容。
推荐阅读
- c# - 如何将 postsharp 方面应用于网站项目?
- input - 使用 Blazor 组件在 mousedown 和 mouseup 的输入中选择字符(突出显示文本)
- scala - 如何使用列表缓冲区更新地图作为scala中的值?
- python - Google Sheets Python 快速入门需要定期登录
- mysql - 我可以自动缩放 DMS 复制实例吗?
- ios - 如何挂钩到框架方法?
- javascript - Axios 发布请求失败并出现 404
- python - 抓取迭代数据:空列表
- javascript - 在 fetch 加载页面后保持复选框处于选中状态
- html - 在节点 js 中渲染“index.html”,显示空白屏幕