Crontab 未运行脚本

Crontab 未运行脚本

編輯:

我每天凌晨 1 点通过 cronjob 运行一个脚本:

0 1 * * * /bin/bash /home/performanceRatio.sh

它也出现在 cron.log 中:

Feb  2 01:00:01 inf-education-67 CRON[108963]: (root) CMD (bash performanceRatio.sh)
Feb  2 01:00:01 inf-education-67 CRON[108962]: (CRON) info (No MTA installed, discarding output)

预期行为是更新 mysql 数据库。如果手动运行,则会出现更改。

使用 Ubuntu 20.04

我的脚本如下:

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

python3 get_weather_data_crn.py && python3 pv.py

* * * * * env > /tmp/env.output显示:

HOME=/root
LOGNAME=root
PATH=/usr/bin:/bin
LANG=de_DE.UTF-8
SHELL=/bin/sh
PWD=/root

答案1

好吧,也许这是我已经做过的编辑的组合(也在我的帖子中)。但最终的解决方案是这样的:

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

python3 /home/get_weather_data_crn.py && 
python3 /home/pv.py

是的,&& 之后不添加换行符!导致 Crontab 无法运行 python 脚本。

答案2

通过cron、运行的作业crontab不会在桌面上的同一运行时环境中运行。您的任何PATH更改或其他环境变量设置都不会自动传播到您的cron作业。例如,没有$DISPLAY,因此 GUI 程序需要特殊处理(阅读man xhost)。

cron人们可以在crontab文件 Read中为所有作业设置环境变量man 5 crontab

echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias查看每个环境中的结果 。

由于command该行的一部分crontab默认由 解释/bin/sh,其语法比 更简单/bin/bash,因此我建议command调用一个bash脚本(可执行、已安装、以 开头#!/bin/bash)来设置环境,然后调用所需的程序。

相关内容