【问题标题】:Python writing to file works fine when done manually, but cron fails手动完成时,Python 写入文件工作正常,但 cron 失败
【发布时间】:2021-01-15 19:48:27
【问题描述】:

我编写了一个写入文本文件的 python 脚本,代码如下所示:

playercountlog = open("PMCcount.txt", "a")

playercountlog.write(time.strftime("%m/%d/%Y"));
playercountlog.write(" ");
playercountlog.write(time.strftime("%I:%M:%S"));
playercountlog.write(" ");
playercountlog.write(count);
playercountlog.write("\n")
playercountlog.close()

这个脚本在以 root (python program.py) 执行时可以正常工作,但是当像这样添加到 cron 时:

* * * * * /user/bin/python /home/labtec901/program.py

没有任何东西被写入文件。

为了确定,我已将程序和 txt 文件都修改为 777,但没有区别。什么给了?

【问题讨论】:

    标签: python cron


    【解决方案1】:

    您在crontab 中的行可能类似于:

    * * * * * cd /home/labtec901 && /usr/bin/python /home/labtec901/program.py
    

    这解决了两个问题:您的程序现在在labtec901 的主目录中运行(而不是root 的目录,如果它是它的 crontab 的话),并且 Python 的路径已更正 - 来自 @ 987654325@转/usr/bin/python

    或者,如果您不想在 crontab 中使用 cd 命令,只需将其作为 python 程序的第一行:

    import os
    os.chdir('/home/labtec901')
    

    OR,可以指定打开文件的绝对路径:

    playercountlog = open("/home/labtec901/PMCcount.txt", "a")
    

    【讨论】:

      【解决方案2】:

      cron 作业具有不同的工作目录。因此,它要么写在其他地方,要么失败,因为你在那里没有权利。请改用绝对文件名。

      【讨论】:

      • 具体来说,cron 通常在其 crontab 所在用户的主目录中运行作业。
      • @JohnZwinck - 嗯,我没想到。我通常在我自己的帐户之外进行安排并使用绝对路径。
      【解决方案3】:

      --user 是答案(对我来说)

      我刚刚发现这篇文章,因为我遇到了完全相同的问题(多年后)。

      我尝试了很多,例如提议的os.chdir('...') 不起作用。

      最终我将文件执行为: 0 * * * * python3 /home/me/folder/script.py --user 和 --user 帮我解决了这个问题。

      注意,如果在执行脚本之前没有使用cd /home/me/folder/ && python3 /home/me/folder/script.py --user,则输出直接写入主目录me

      附带说明:即使 python 脚本显示with open('right_here.txt', 'a+') as file: [..],也会发生这种情况,因此表明该文件位于同一文件夹中。 CRON 的看法不同。

      【讨论】:

        猜你喜欢
        • 2013-06-27
        • 2019-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-29
        • 1970-01-01
        • 2011-03-21
        • 2020-06-26
        相关资源
        最近更新 更多