Вы вошли в систему как обычный пользователь, пытающийся запланировать выполнение задания cron каждую минуту на RHEL8. Скрипт Python работает нормально при выполнении на терминале как ./python.py, но выдает ошибку при запуске в качестве задания в crontab. Ниже приведены абсолютные пути, полученные с помощью «what python3» и «realpath -e python.py». предоставлены разрешения chmod 777 для python.py.

Crontab -e

* * * * * /usr/bin/python3   /home/user/test_1/test/python.py >>  /home/user/test_1/test/cron.log 2>&1

Ошибка :

Traceback (most recent call last):

File "/home/user/test_1/test/python.py", line 127, in <module>
 log_location = config.log_file_location()
File "/home/user/test_1/test/config.py", line 62, in log_file_location
 baseLoc = self.base_data_location()
File "/home/user/test_1/test/config.py", line 56, in base_data_location
 baseDirPath = self.cb_config.get('base_data_dir', '/tmp')
AttributeError: 'NoneType' object has no attribute 'get'
Exception reading config: No section: 'test_connection'
Exception reading config: No section: 'product_info'
Exception reading config: No section: 'event_ids
0
Vaish 2 Авг 2021 в 04:57
1
Почему вы используете явный интерпретатор в запланированном задании, а не когда запускаете его в интерактивной оболочке? Попробуйте удалить /usr/bin/python3 перед /home/user/test_1/test/python.py и дайте сценарию решить, какой интерпретатор использовать через его строку #!. Это может иметь значение, если у вас установлено несколько интерпретаторов Python.
 – 
Kusalananda
2 Авг 2021 в 09:17
Привет, попытался собрать как cron_script.sh #!/usr/bin/env python3 /home/user/Test_01/Test/python.py Получение ошибки: [user@W-Test_01 Test]$ ./cron-script.sh File «./cron-script.sh», строка 3 /home/user/Test_01/Test/python.py (синтаксическая ошибка, указывающая на начало пути python.py) ^ SyntaxError: неверный синтаксис
 – 
Vaish
2 Авг 2021 в 16:44

1 ответ

Этот сценарий, вероятно, зависит от переменной среды оболочки, которая установлена ​​в вашей интерактивной оболочке, но не в среде cron. Держу пари, что base_data_location() вызывает os.environ.get(<some variable>), и это не определяется в вашем контексте cron.

0
Stabledog 2 Авг 2021 в 01:54