Cron作业无法执行写入文本文件的python脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cron作业无法执行写入文本文件的python脚本相关的知识,希望对你有一定的参考价值。

我需要在远程服务器上运行python脚本(我不是这个服务器的所有者,所以我无法检查var/log/syslog)。该脚本放在一个文件夹中,该文件夹包含脚本所依赖的其他文件以便能够运行。该脚本将写出文本文件,正在编写的信息包括脚本的运行时。

如果我手动执行脚本,它将写入包含所有正确信息的文本文件。但是,当我设置一个测试cron作业以确保我的脚本运行并且输出文件看起来像我想要的那样时,输出文件只有一行包含一个非常小的浮点数,我认为它是脚本的运行时。服务器的默认python版本是python 2.7。但是,我的脚本需要运行python3。下面是我使用的crontab命令

# crontab command
# the time is just an example
23 23 13 4 6 /usr/bin/python3 /home/user_name/path/to/file.py

我尝试过只使用python3 files.pypython3.5 files.py,所有情况都是相同的结果。

我尝试运行脚本的文件夹中的所有文件和我的脚本本身都是chmod 707

另外,附带问题,我正在与其他人共享此服务器;但是,我不希望他们能够打开我的文件,chmod应该设置我的文件和文件夹,以便cron仍然能够执行我的文件,人们将无法查看它(旁边的服务器的所有者)

答案

一,权限:

  • 每个用户都有一个crontab,用户的crontab中的条目作为该用户运行。
  • 文件权限中的三个数字是用户,组和其他。
  • 通常,用户拥有自己的组,并且他们是唯一的成员。

因此,这意味着如果您想要将自己的东西保留在自己身上,只需向您的用户(以及您的群组)授予权限,如果您是唯一的成员,这也是同样的事情。您的crontab可以轻松访问您的用户可以访问的任何内容。

因此,给user_name:user_name的所有相关目录和所有文本文件所有权以及660的权限(只有你可以读取和写入它们)。为所有可执行文件提供相同的所有权但770的权限(因此您也可以执行它们)。

然后,如果你有ssh访问权限,只需从命令行执行/usr/bin/python3 /home/user_name/path/to/file.py,看看它在哪里崩溃。假设您没有ssh访问权限,则需要捕获crontab执行的输出。使用此crontab行:

23 23 13 4 6 /usr/bin/python3 /home/user_name/path/to/file.py > /home/user_name/output.txt 2>&1

这会将所有STDERR重定向到STDOUT(2>&1位)并将STDOUT重定向到output.txt(>位)。

让它运行并检查output.txt的内容。我猜你会发现Python在写入文件之前很难获取某些内容并遭到轰炸。

以上是关于Cron作业无法执行写入文本文件的python脚本的主要内容,如果未能解决你的问题,请参考以下文章

在 CPanel 上设置 Cron 作业以执行 PHP 脚本

无法从 cron 作业中找到 dotenv 环境变量

手动运行脚本与在 cron 中运行

在 cron 作业中执行 PHP 脚本

基本 cron 作业设置为每天执行 php 文件

如何防止 cron 作业执行(如果它已经在运行)