Задание Cron не может выполнить скрипт Python, который пишет в текстовый файл - PullRequest
0 голосов
/ 14 апреля 2019

Мне нужно запустить скрипт 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 по-прежнему мог выполнять мои файлы, и люди не могли его просматривать (кромевладелец сервера)

1 Ответ

0 голосов
/ 14 апреля 2019

Во-первых, разрешения:

  • У каждого пользователя есть crontab, и записи в crontab пользователя запускаются от имени этого пользователя.
  • Три числа в разрешении файлов - это пользователь,group и др.
  • Как правило, у пользователя есть своя собственная группа, и они являются ее единственным членом.

Так что это означает, что если вы хотите сохранить свои материалы для себя,только предоставляйте разрешения своему пользователю (и, необязательно, вашей группе, что то же самое, если вы единственный участник).У вашего 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 (бит >).

Letзапустить и проверить содержимое файла output.txt.Я предполагаю, что вы обнаружите, что Python имел проблемы с доступом к чему-то и подвергся бомбардировке, прежде чем много писать в файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...