【问题标题】:Cron, execute bash script as root, but one part (Python script) as userCron,以root身份执行bash脚本,但一部分(Python脚本)以用户身份执行
【发布时间】:2022-01-17 18:28:24
【问题描述】:

我需要在 Jetson Nano(比如 Ubuntu 18.04)上定期运行 bash 脚本。该脚本应该运行系统更新,从存储库中提取一些 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

我创建了一个以 root 身份运行此脚本的 cron 作业,使用

sudo crontab -e

并添加条目

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

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

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

【问题讨论】:

    标签: python bash cron cron-task


    【解决方案1】:

    好吧,如果确实创建了虚拟文件夹,这意味着 sudo 语句有效,所以我会说有 99% 以上的机会实际上启动了 python。

    我猜问题是你没有指定 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 记录到该文件中。

    【讨论】:

    • 感谢您的回复!在运行 python 代码之前,我正在从 bash 脚本更改工作目录(cd /home/user_name/projects/my_folder),所以我想这不应该是问题。另外,正如我所说,我尝试以非 root 用户身份创建 cron 作业,一切正常。
    • 是的,但以userX 运行它与运行sudo -u userX 的root 用户并不完全相同,存在一些细微的差异(可能重要也可能不重要);我会检查日志文件的内容。
    • 是的,这似乎是问题所在,像这样运行 Python 脚本会在导入的 Python 包中产生一些问题。我将以非 root 身份运行此脚本,并将系统更新保留在另一个 cron 作业中,谢谢!
    猜你喜欢
    • 2013-08-10
    • 2019-05-19
    • 2011-12-27
    • 1970-01-01
    • 2014-05-21
    • 2014-04-29
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多