Cron,以 root 身份执行 bash 脚本,但以用户身份执行一部分(Python 脚本)

Cron, execute bash script as root, but one part (Python script) as user

我需要在 Jetson Nano 上定期 运行 一个 bash 脚本(所以,Ubuntu 18.04)。该脚本应该 运行 系统更新,从存储库中提取一些 Python 代码,并 运行 它作为指定用户。 所以,我创建了这个脚本:

#! /bin/bash

## system updates
sudo apt update
sudo apt upgrade

## stop previous instances of the Python code
pkill python3

## move to python script folder
cd /home/user_name/projects/my_folder

## pull updates from repo
git stash
git pull

## create dummy folder to check bash script execution to this point
sudo -u user_name mkdir /home/user_name/projects/dummy_folder_00

## launch python script
sudo -u user_name /usr/bin/python3 python_script.py --arg01 --arg02

## create dummy folder to check bash script execution to this point
sudo -u user_name mkdir /home/user_name/projects/dummy_folder_01

我创建了一个 cron 作业 运行将此脚本作为 root,使用

sudo crontab -e

并添加条目

00 13 * * * /home/user_name/projects/my_folder/script.sh

现在,我可以看到在配置的时间,创建了两个虚拟文件夹,它们实际上属于 user_name。但是,Python 脚本未启动。

我尝试以非 root 用户身份创建 cron 作业 (crontab -e),但此时即使执行了 Python 脚本,我想我也无法 运行 适合 update/upgrade。 我该如何解决这个问题?

好吧,如果确实创建了虚拟文件夹,这意味着 sudo 语句有效,所以我认为 python 实际上已启动的可能性超过 99%。

我猜问题是您没有指定 python 文件的路径,您的工作目录可能不是您所期望的。

变化:

sudo -u user_name /usr/bin/python3 python_script.py --arg01 --arg02

类似于

sudo -u user_name /usr/bin/python3 /path/to/your/python_script.py --arg01 --arg02

然后测试。

如果那没有解决问题,则启用一些日志记录,将行更改为:

sudo -u user_name /usr/bin/python3 /path/to/your/python_script.py --arg01 --arg02 \
1> /home/user_name/projects/dummy_folder_00/log.txt 2>&1 ;

再次测试,它应该将 STDOUT 和 STDERR 记录到该文件。