首页 > 解决方案 > 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

我已经尝试使用 justpython3 files.pypython3.5 files.py,所有情况下的结果都相同。

我试图运行我的脚本的文件夹中的所有文件,我的脚本本身是chmod 707

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

标签: python-3.xcronwritetofile

解决方案


一、权限:

  • 每个用户都有一个 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 在访问某些东西时遇到了麻烦,并且在向文件写入很多内容之前就被轰炸了。


推荐阅读