Как установить работу crontab для сценария perl - PullRequest
4 голосов
/ 24 марта 2012

У меня есть Perl-скрипт, который я хочу запускать каждые 4 часа через cron.Но почему-то он не выполняется через cron и работает нормально, если я запускаю его через командную строку.Ниже приведена команда, которую я установил в crontab:

perl -q /path_to_script/script.pl > /dev/null

Кроме того, когда я запускаю эту команду в командной строке, она не выполняется, но когда я захожу в конечную папку в path_to_script и выполняю файл, он работает нормально.

Кроме того, где будут создаваться файлы журналов этого задания cron, чтобы я мог их просматривать?

Ответы [ 4 ]

8 голосов
/ 24 марта 2012

Вам, вероятно, следует изменить рабочий каталог на "конечную папку".

Попробуйте в команде crontab:

cd /path_to_script; perl script.pl >/dev/null

Wrt. лог-файлы. Крон вышлет вам на почту. Но поскольку вы отправили stdout в / dev / null, вам будет отправлена ​​только stderr.

Если вы хотите, чтобы выходные данные были сохранены в файле журнала, затем перенаправьте вывод сценария stderr / stdout в файл, например, так:

cd /path_to_script; perl script.pl 2>&1 >my_log_file
2 голосов
/ 24 марта 2012

Обычно cron отправляет вам почту с выводом вашей программы. Когда вы понимаете это, вы, вероятно, хотите проверить окружающую среду. Это не обязательно будет та же среда, что и ваша оболочка для входа (поскольку это не оболочка для входа):

 foreach my $key ( keys %ENV ) {
     printf "$key: $$ENV{$key}\n";
     }

Если вы упускаете что-то, что вам нужно, установите это в вашем файле:

 SOME_VAR=some_value
 HOME=/Users/Buster

Если вам нужно начать с определенного каталога, вы должны chdir там. Начальный каталог из задания cron, вероятно, не такой, как вы думаете. Без аргумента chdir переходит в ваш домашний каталог. Однако иногда эти переменные окружения могут быть не установлены в вашем сеансе cron, поэтому, вероятно, лучше иметь значение по умолчанию:

 chdir( $ENV{HOME} || '/Users/Buster' );

В различных критических точках вы должны выдавать ошибку. Это хорошо даже в не-1016 * cron программах:

 open my $fh, '<', $some_file or die "Didn't find the file I was expecting: $!";

Если вы перенаправите вещи на / dev / null , вы потеряете всю информацию, которая может помочь вам решить проблему.

0 голосов
/ 30 августа 2017

Если вы используете команду в вашей perl-программе, я советую вам указать полный путь к команде в вашей программе.

Я попытался загрузить окружение, но это не более полезно.

После проверки с одним коллегой, я думаю, что это связано с взаимодействием Perl и системной среды.

С уважением, Мустафа Курума

0 голосов
/ 24 марта 2012

похоже, что вы, возможно, пропустили

#!/usr/bin/perl

в начале вашего сценария perl, поэтому вам может понадобиться perl -q для его запуска, как только вы добавите эту строку, вы можете запустить ее непосредственно изкомандная строка с использованием

/path_to_script/script.pl
...