在crontab的shell脚本中使用python3

Yan*_*SSE 11 python unix cron usergroups

我尝试使用运行python3脚本的crontab运行shell脚本.crontab用于用户组.现在它运行脚本但不运行其中的python3脚本.我尝试调试它,但我无法弄清楚会发生什么.它可能是一个权限问题或路径问题,但我无法弄清楚.这是行crontab

*/5 * * * * /home/group_name/path/to/script/run.sh
Run Code Online (Sandbox Code Playgroud)

正如我所说的cron作业被执行或者至少那就是我的想法,因为当我跑步时sudo grep CRON /var/log/syslog我会得到像这样的行

 Feb 16 20:35:01 ip-**-**-*-*** CRON[4947]: (group_name) CMD (/home/group_name/path/to/script/run.sh)
Run Code Online (Sandbox Code Playgroud)

在下面我也得到一条可能与问题有关的线

Feb 16 20:35:01 ip-**-**-*-*** CRON[4946]: (CRON) info (No MTA installed, discarding output)
Run Code Online (Sandbox Code Playgroud)

最后run.sh看起来像这样

#!/bin/bash

# get path to script and path to script directory
SCRIPT=$(readlink -f "$0")
SCRIPTPATH=$(dirname "$SCRIPT")

echo "set directory"
cd "$SCRIPTPATH"

echo "run first script"
/usr/bin/python3 ./first_script.py > ./log1.txt
Run Code Online (Sandbox Code Playgroud)

但是当cron作业执行时没有任何反应,当我手动运行它时,数据库的cahnges按预期发生.该集团拥有与我相同的权利.shell文件可以由我执行,组和python文件不能由我执行,所以我不知道为什么该组需要这个.

PS:我想在shell中执行python脚本,因为我们有很多脚本,有时会有很多参数,因此crontab会变得人满为患,而且某些脚本必须以特定的顺序执行.

编辑:在我手动运行它exec >> /tmp/output 2>&1之后#! /bin.bash写入回声后立即添加/tmp/output,但不是在我在cron中运行时,而不是在运行任何python脚本之前运行它.

直接从cron运行其中一个python脚本,但即使我复制粘贴与在cron中工作的行完全相同的行,也没有任何反应.

YPC*_*ble 5

这个问题有很多组成部分。我忽略了MTA错误,因为那只是有关您的cron作业完成时的电子邮件通知。我还将假设您已正确设置了权限,并且在shell中手动运行脚本时,脚本运行良好。

最大的问题是CRON命令与从终端“ shell”运行命令不同。您必须指定使用bash运行脚本。将您的Cron工作从以下位置更改:

*/5 * * * * /home/group_name/path/to/script/run.sh 
Run Code Online (Sandbox Code Playgroud)

至:

*/5 * * * * bash /home/group_name/path/to/script/run.sh
Run Code Online (Sandbox Code Playgroud)

该问题有更多信息和解决问题的其他方法。