Perl скрипт работает, но не через CRON - PullRequest
2 голосов
/ 03 декабря 2010

У меня есть Perl-скрипт (который очень вкусно синхронизируется с wp), который:

  1. работает через оболочку, но
  2. не запускается через cron (и я не получаю сообщение об ошибке)

Единственное, о чем я могу думать, это о том, что он неправильно читает файл конфигурации, но ... он определяется по полному пути (я думаю).

Я прочитал мой конфигурационный файл как:

my $config = Config::Simple->import_from('/home/12345/data/scripts/delicious/wpds.ini',
   \my %config);

(я нахожусь на mediatemple)

У кого-нибудь есть подсказка?

обновление 1 : ЗДЕСЬ полный код: http://plugins.svn.wordpress.org/wordpress-23-compatible-wordpress-delicious-daily-synchronization-script/trunk/ (но я добавил путь, указанный выше, к расположению файла конфигурации в качестве разницы)

обновление 2 : перекрестное на https://forums.mediatemple.net/viewtopic.php?pid=31563#p31563

обновление 3 : полный путь добился цели, решено

Ответы [ 6 ]

7 голосов
/ 03 декабря 2010

Разница между заданием cron и заданием, запускаемым из оболочки, заключается в «окружающей среде». Основное отличие состоит в том, что ваш профиль и т.п. не запускаются для задания cron, поэтому любые переменные среды, которые вы установили в обычной среде оболочки, не устанавливаются одинаково в среде cron - нет расширений PATH, нет переменных среды, определяющих Delicious и / или WP хостинг и т.д.

Предложение: создайте задание cron, которое просто сообщает об окружающей среде известному файлу:

env > /home/27632/tmp/env.27632

Тогда посмотрите, что установлено в вашей собственной оболочке для сравнения. Скорее всего, это покажет проблему.

В противном случае другие различия в среде заключаются в том, что задание cron не имеет терминала и имеет / dev / null для ввода и вывода - поэтому интерактивные вещи не работают хорошо.

4 голосов
/ 04 декабря 2010

похоже, проблема не в запуске perl, а в поиске библиотеки Config

Вы должны попробовать:

perl -e "print @INC"

и запустите аналогичный сценарий perl в cron и прочитайте вывод

возможно, что они отличаются

2 голосов
/ 03 декабря 2010

Предлагаю посмотреть на мой ответ на Как имитировать среду, с которой cron выполняет скрипт?

Это аналогичный ответ Джонатана, но он идет немного дальше.

1 голос
/ 03 декабря 2010

В зависимости от вашего crontab и в зависимости от вашей установки, проблема может быть в «perl». Как отмечают другие, среда, в частности переменная $PATH, отличается для cron. Возможно, perl не указан в пути, поэтому вам нужно указать полный путь к perl в команде cron.

Вы можете определить путь с помощью команды $ type perl

0 голосов
/ 23 ноября 2017
 If the perl script runs fine manually, but not from crontab, then
 there is some environment path needed by the some package that is not
 getting through `cron`. Run your command as follows:
 suppose your cron entry like:

* 13 * * * /usr/bin/perl /home/username/public_html/cron.pl >/dev/null 2>&1

 env - /home/username/public_html/cron.pl

 The output will show you the missing package. export that package path in
 $PATH variables
0 голосов
/ 18 ноября 2016

Я сталкиваюсь с той же проблемой ...

Скрипт Perl работает, но не через CRON => ошибка: «perl: команда не найдена»

... после обновления с Plesk 12.0 до Plesk 12.5. Но существующие ответы были не очень полезны для меня.

Это заняло некоторое время, но я нашел эту тему на форуме Odin, которая мне помогает: https://talk.plesk.com/threads/scheduled-tasks-always-fail.331821/

Они предлагают следующее:

/usr/local/psa/bin/server_pref -u -crontab-secure-shell ""

Это удаляет в файлах / var / spool / cron / crontabs строку:

SHELL="/opt/psa/bin/chrootsh"

После этого мои задания cron запускаются без ошибок.

(Ubuntu 14.04 с Plesk 12.5)

...