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

问题描述 投票:0回答:1

我需要在远程服务器上运行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仍然能够执行我的文件,人们将无法查看它(旁边的服务器的所有者)

python-3.x cron writetofile
1个回答
0
投票

一,权限:

  • 每个用户都有一个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在写入文件之前很难获取某些内容并遭到轰炸。

© www.soinside.com 2019 - 2024. All rights reserved.