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中工作的行完全相同的行,也没有任何反应.
这个问题有很多组成部分。我忽略了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)
该问题有更多信息和解决问题的其他方法。