Python 将crontab与dzdo su一起使用

Python 将crontab与dzdo su一起使用,python,Python,我必须使用命令dzdo su移动到root用户,以便在我可以访问的VM上执行任何操作。在使用命令dzdo su之后,我能够毫无问题地运行我编写的一个小python脚本。我已将此脚本放入根用户的crontab中。但是,当脚本从root的crontab运行时,它会失败,因为它找不到我已安装的用于脚本的python模块,例如,我得到如下结果: Traceback (most recent call last): File "/scripts/utps/utpsui_getData.py&

我必须使用命令
dzdo su
移动到root用户,以便在我可以访问的VM上执行任何操作。在使用命令
dzdo su
之后,我能够毫无问题地运行我编写的一个小python脚本。我已将此脚本放入根用户的crontab中。但是,当脚本从root的crontab运行时,它会失败,因为它找不到我已安装的用于脚本的python模块,例如,我得到如下结果:

Traceback (most recent call last):
  File "/scripts/utps/utpsui_getData.py", line 9, in <module>
    import pymysql.cursors
ImportError: No module named pymysql.cursors
当我从根crontab运行脚本时,我得到以下结果:

['/scripts/utps', '/usr/lib64/python27.zip', '/usr/lib64/python2.7', '/usr/lib64/python2.7/plat-linux2', '/usr/lib64/python2.7/lib-tk', '/usr/lib64/python2.7/lib-old', '/usr/lib64/python2.7/lib-dynload', '/usr/lib64/python2.7/site-packages', '/usr/lib64/python2.7/site-packages/gtk-2.0', '/usr/lib/python2.7/site-packages']
['/scripts/utps', '/opt/rh/rh-python38/root/usr/lib64/python38.zip', '/opt/rh/rh-python38/root/usr/lib64/python3.8', '/opt/rh/rh-python38/root/usr/lib64/python3.8/lib-dynload', '/opt/rh/rh-python38/root/usr/local/lib/python3.8/site-packages', '/opt/rh/rh-python38/root/usr/local/lib/python3.8/site-packages/requests-2.24.0-py3.8.egg', '/opt/rh/rh-python38/root/usr/local/lib/python3.8/site-packages/urllib3-1.25.10-py3.8.egg', '/opt/rh/rh-python38/root/usr/local/lib/python3.8/site-packages/chardet-3.0.4-py3.8.egg', '/opt/rh/rh-python38/root/usr/local/lib/python3.8/site-packages/certifi-2020.6.20-py3.8.egg', '/opt/rh/rh-python38/root/usr/lib64/python3.8/site-packages', '/opt/rh/rh-python38/root/usr/lib/python3.8/site-packages']
当我从根命令行运行脚本时,我得到以下结果:

['/scripts/utps', '/usr/lib64/python27.zip', '/usr/lib64/python2.7', '/usr/lib64/python2.7/plat-linux2', '/usr/lib64/python2.7/lib-tk', '/usr/lib64/python2.7/lib-old', '/usr/lib64/python2.7/lib-dynload', '/usr/lib64/python2.7/site-packages', '/usr/lib64/python2.7/site-packages/gtk-2.0', '/usr/lib/python2.7/site-packages']
['/scripts/utps', '/opt/rh/rh-python38/root/usr/lib64/python38.zip', '/opt/rh/rh-python38/root/usr/lib64/python3.8', '/opt/rh/rh-python38/root/usr/lib64/python3.8/lib-dynload', '/opt/rh/rh-python38/root/usr/local/lib/python3.8/site-packages', '/opt/rh/rh-python38/root/usr/local/lib/python3.8/site-packages/requests-2.24.0-py3.8.egg', '/opt/rh/rh-python38/root/usr/local/lib/python3.8/site-packages/urllib3-1.25.10-py3.8.egg', '/opt/rh/rh-python38/root/usr/local/lib/python3.8/site-packages/chardet-3.0.4-py3.8.egg', '/opt/rh/rh-python38/root/usr/local/lib/python3.8/site-packages/certifi-2020.6.20-py3.8.egg', '/opt/rh/rh-python38/root/usr/lib64/python3.8/site-packages', '/opt/rh/rh-python38/root/usr/lib/python3.8/site-packages']

如果是同一个用户,为什么两者之间的路径会不同?如何确保在root shell和root crontab之间有相同的环境(假设这是我的问题)?

在深入研究之后,我找到了三种不同的方法来解决我的问题,这三种方法都来自这里:。有人知道其中哪一个是最好的,为什么或者说实际上没有功能上的区别吗

* * * * * bash -lc "python /scripts/utps/utpsui_getData.py >> /var/log/utpsui_getData_PPM.log 2>&1"


* * * * * . /etc/profile; python /scripts/utps/utpsui_getData.py >> /var/log/utpsui_getData_outputNullRate.log 2>&1


PATH=/opt/rh/rh-python38/root/usr/local/bin:/opt/rh/rh-python38/root/usr/bin:/opt/rh/rh-python38/root/usr/local/bin:/opt/rh/rh-python38/root/usr/bin:/usr/share/centrifydc/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/var/cfengine/bin:/var/cfengine/bin
* * * * * python /scripts/utps/utpsui_getData.py >> /var/log/utpsui_getData_PPM.log 2>&1

在探索了更多之后,我发现了三种不同的方法来解决我的问题,这三种方法都来自这里:。有人知道其中哪一个是最好的,为什么或者说实际上没有功能上的区别吗

* * * * * bash -lc "python /scripts/utps/utpsui_getData.py >> /var/log/utpsui_getData_PPM.log 2>&1"


* * * * * . /etc/profile; python /scripts/utps/utpsui_getData.py >> /var/log/utpsui_getData_outputNullRate.log 2>&1


PATH=/opt/rh/rh-python38/root/usr/local/bin:/opt/rh/rh-python38/root/usr/bin:/opt/rh/rh-python38/root/usr/local/bin:/opt/rh/rh-python38/root/usr/bin:/usr/share/centrifydc/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/var/cfengine/bin:/var/cfengine/bin
* * * * * python /scripts/utps/utpsui_getData.py >> /var/log/utpsui_getData_PPM.log 2>&1

你试过像这样在crontab中运行吗
***sudo python3/path/to/file.py
我尝试了这些变体,但没有成功:
***sudo python3/path/to/file.py
***dzdo python3.8/path/to/file.py
,等等。您是否尝试像这样在crontab中运行
***sudo python3/path/to/file.py
我尝试了这些变体,但没有成功:
***sudo python3/path/to/file.py
***dzdo python3.8/path/to/file.py
,等等。