pfSense cron задача не се изпълнява или няма изход

Надявам се, че някой може да ми помогне тук.

Написах скрипт на Python, който искам да изпълнявам под CRON на всеки 5 минути. В съответствие с общата практика за сигурност с най-малко привилегии, аз:

  • създаде потребителски „персонализиран“ за използване за персонализирани скриптове
  • създадоха група "по избор" (не искам нищо, работещо под никой, да няма достъп) и;
  • поставете скрипта (монитора) в /home/custom/bin

Шебангът в сценария е:

#!/usr/bin/env python2.7

Единственото разрешение, дадено на персонализирания потребител, е:

Inherited from   Name   Description                  Action
                User - System: Shell account access   Indicates whether the user is able to login for example via SSH.

Изпълнението на скрипта с командата /home/custom/bin/monitor от командния ред работи независимо от текущата работна директория.

Опитах първо да направя cd /, за да се уверя, че не е проблем с пътя и скриптът работи правилно.

Скриптът записва 2 файла при първото изпълнение, а следващите изпълнявания се добавят към тези файлове в директорията /home/custom/bin/mondata

Инсталирах пакета CRON и създадох следния запис:

*/5 * * * * custom /home/custom/bin/monitor

(Изглежда, че няма „Прилагане на промените“, така че предполагам, че не е необходимо да рестартирам или да правя нещо, за да заредя промените.) (Горният запис и много други се показват в WebGUI и Знам, че няколко от тези други задачи на cron се изпълняват.)

След като изчаках достатъчно време за стартиране на скрипта, проверих за изход и нямаше нищо.

Промяната на custom на root за целите на тестването (само в случай, че проблемът е проблем с разрешение) не решава проблема.

Ето съответните разрешения за файлове:

[2.3.2-RELEASE][custom@local]/home/custom/bin: ls -laR ~
total 52
drwxr-xr-x  4 custom  nobody   512 Aug  7 00:14 .
drwxr-xr-x  4 root    wheel    512 Jul 27 15:24 ..
drwxr-xr-x  3 custom  custom   512 Aug  7 00:14 bin

/home/custom/bin:
total 20
drwxr-xr-x  3 custom  custom   512 Aug  7 00:14 .
drwxr-xr-x  4 custom  nobody   512 Aug  7 00:14 ..
drwxrwx---  2 custom  custom   512 Aug  7 00:07 mondata    <-Script output goes here
-rwxr-xr-x  1 custom  custom  4663 Aug  5 22:44 monitor    <-The script

/home/custom/bin/mondata:
total 8
drwxrwx---  2 custom  custom  512 Aug  7 00:07 .           <-NO OUTPUT! (I deleted the files manually after successful tests)
drwxr-xr-x  3 custom  custom  512 Aug  7 00:14 ..

Проверих за съобщение за грешка в: Състояние / Система / Регистрации / Система / Общи - нищо не е намерено.

Дори се опитах временно да променя разрешенията на /home/custom/bin/mondata на 777 и да настроя cron потребителя на root (напълно неприемлива практика за сигурност само за тестване, но дори това не проработи.)

Нямам начин да разбера дали скриптът работи и записите във файла са отказани по някаква причина или скриптът изобщо не работи.

BTW, къде е разделът cron? Когато стартирам crontab -l като root, получавам crontab: няма crontab за root, но ЗНАМ, че заданията cron се изпълняват. (Изпълнявам ежедневния отчет по пощата.)

Всякакви предложения - дори за отстраняване на неизправности, за да разберете дали скриптът работи, ще бъде полезно.

Благодаря.


person user73383    schedule 07.08.2016    source източник
comment
Ако инсталирате пакета „Cron“ на pfsense, тогава можете да преглеждате/редактирате cronjobs от „Услуги -› Cron“ от уеб интерфейса.   -  person mwfearnley    schedule 17.10.2017
comment
Големият въпрос: как да видите журналите на cron от уеб интерфейса?   -  person sorin    schedule 06.04.2018


Отговори (1)


Проблемът беше, че python не се изпълняваше.

Така нареченият "преносим" shebang, който работеше в командния ред -

#!/usr/bin/env python2.7

- НЕ РАБОТИ от cron.

Създадох следния файл като /home/custom/bin/tcron

#!/usr/bin/env python2.7
import os
os.system('/usr/local/bin/minicron')

Когато се изпълнява от командния ред, той поставя грешката на minicron в дневника всеки път, когато се изпълнява, но не прави нищо, когато се изпълнява от cron.

Промених #!/usr/bin/env python2.7 на #!/usr/local/bin/python2.7 и сега работи.

Не знам дали това е умишлено, че #!/usr/bin/env python2.7 не работи от cron, но засега няма да се тревожа за това.

Надявам се, че документирането на това може да спести същите проблеми на някой друг и ако това е грешка, която трябва да бъде докладвана, някой, който знае как да го направи, ще го направи.

person user73383    schedule 16.08.2016
comment
Мисля, че проблемът е, че cron може да използва различен $PATH от вашата обвивка за вход, който не съдържа python2.7, така че env няма да го намери. Можете да проверите вашата cron среда с stackoverflow.com/a/2546509/446106 - person mwfearnley; 20.02.2019