Python + Cron: No such file or directory
我有一个更新.txt文件的python脚本。
当我在终端中手动运行该文件时,它也会更新该文件。然而,这似乎只是一个问题,当它与cron一起运行时。
日志文件中的响应为:
No such file or directory: 'uploads/test.txt'
用于此的cron命令是:
1
| * * * * * /usr/bin/python3 /root/script.py >> /root/log.log 2>&1 |
我真的被难住了。有什么解决方案吗?
- 您是否尝试过使用到script.py中的test.txt文件的绝对路径?
- 我试过用~/root/uploads.test.txt这是绝对路径吗?
- 看起来不太对劲。试试/root/uploads/test.txt!没有~,这是curretn用户主文件夹的路径。
- @Charlesduffy显然我的意思是/而不是.,uploads/test.txt是运行脚本中的引用。
- 默认情况下,cron作业在/中运行,因此uploads/test.txt将查找/uploads/test.txt,而您可能没有。
- 该文件与script.py位于同一位置
- 是的,但.不是脚本的位置,而是启动脚本的进程的当前工作目录。完全不同的东西。
- …也就是说,明确地说,这是误会的根源,这让一个被骗的人得以确认。
- @jamesg,…btw,~是shell扩展的语法。它对操作系统级的open()syscall或其他语言包装没有意义;如果希望将~替换为当前用户在python中的主目录,则需要使用os.path库调用。
uploads/test.txt是一个相对路径。cron不是从uploads的父目录运行的。使用绝对路径将(例如/data/foo/uploads/test.txt或cwd上载到uploads的父目录。
- 您也可以建议使用cd /data/foo && exec python ...作为替代方法(exec只是一种性能优化——意味着在python启动之后,shell不需要在内存中停留——但&&是关键的:意味着如果我们不能运行python解释器,则不尝试运行该解释器到脚本的目录预计从开始)。