編輯:
我每天凌晨 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
)来设置环境,然后调用所需的程序。