我需要在远程服务器上运行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.py
和python3.5 files.py
,所有情况都是相同的结果。
我尝试运行脚本的文件夹中的所有文件和我的脚本本身都是chmod 707
另外,附带问题,我正在与其他人共享此服务器;但是,我不希望他们能够打开我的文件,chmod应该设置我的文件和文件夹,以便cron仍然能够执行我的文件,人们将无法查看它(旁边的服务器的所有者)
一,权限:
因此,这意味着如果您想要将自己的东西保留在自己身上,只需向您的用户(以及您的群组)授予权限,如果您是唯一的成员,这也是同样的事情。您的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在写入文件之前很难获取某些内容并遭到轰炸。