Python 3.x 在调度程序和bash脚本下读取pickle文件的权限被拒绝
我有一个可执行的bash脚本(Python 3.x 在调度程序和bash脚本下读取pickle文件的权限被拒绝,python-3.x,bash,cron,pickle,root,Python 3.x,Bash,Cron,Pickle,Root,我有一个可执行的bash脚本(.sh),应该一致地运行两个python脚本(只有当第一个脚本成功完成后,第二个脚本才会启动),run\u script.sh具有以下视图: #!/bin/bash #!/usr/bin/python3 scripts='/path/to/file/file1.py /path/to/file/file2.py' for s in $scripts do echo $s /usr/bin/python3 $s done 作为调度程序,我使用cron
.sh
),应该一致地运行两个python脚本(只有当第一个脚本成功完成后,第二个脚本才会启动),run\u script.sh
具有以下视图:
#!/bin/bash
#!/usr/bin/python3
scripts='/path/to/file/file1.py /path/to/file/file2.py'
for s in $scripts
do
echo $s
/usr/bin/python3 $s
done
作为调度程序,我使用crontab作业
:
26 14 10-23 * * cd /path/to/file/ && /path/to/file/run_script.sh >> /home/log/crontab_LOG.log 2>&1
在python脚本中的数据聚合过程中,我使用.pickle
文件。
但是,通过.sh
文件执行建议的python脚本(file1.py
和file2.py
)后,我收到了错误:
PermissionError [Errno 13 ] Permission denied: '/path/to/file/example.pickle'
顺便说一句:example.pickle
文件是在执行file1.py
的过程中创建的,而不是在它使用的地方失控
当尝试在没有任何调度程序的情况下通过终端执行sh run_script.sh
时,权限没有任何错误。所以,结果就是成功
我也试图寻找我的问题,但没有成功。()
问题是如何通过bash脚本将root权限设置为所需的python脚本?它是通过使用
路径
的方法修复的:
from pathlib import Path
example_pickle = Path('logs/example_pickle'+datetime.now()+'.pickle')
感谢大家的灵感:)问题不在于bash脚本的执行权限。问题在于,您的python脚本是以没有
path/to/file/example.pickle
写入权限的用户身份运行的。这可能是因为path/to/file/example.pickle
缺少开头的/
字符?您的run\u script.sh
和file1.py
是否与.pickle
文件位于同一目录中。基本上检查所有这些脚本是否有正确的目录流。另外,如果不是从root
@AvinashYadav运行,请检查cron
用户是否拥有这些脚本的权限,现在run\u script.sh
和file1.py
位于同一目录中,但是由file1.py
script example.pickle文件保存的路径位于file1.py
所在文件夹的子目录中。我将尝试将其移动到一个目录。是,cron用户有权运行脚本。谢谢你的主意。@AndrewVickers,开头有“/”,这只是我的打字错误。Thanks@Cindy你试过在同一个目录中移动吗