Не удается запустить принудительно из crontab

Я пытаюсь выполнить perl-скрипт, который работает с perforce, из crontab. Это мой код Perl:

print `/usr/local/bin/p4 filelog /projects/config.json`;

Я получаю сообщение об ошибке:

Perforce client error:
    Connect to server failed; check $P4PORT.
    TCP connect to perforce:1666 failed.
    Name or service not known

Эта же команда работает гладко из cli. Любые идеи, что я могу сделать с ним?


person polina-c    schedule 16.09.2016    source источник


Ответы (2)


Это потому, что в вашей среде cron не установлены переменные среды P4CONFIG (или альтернативные). Вам просто нужно реплицировать переменные среды, которые у вас есть в вашей интерактивной оболочке (возможно, используя set | grep ^P4, чтобы определить, что они из себя представляют).

Подробнее о настройке переменных окружения см. здесь.

person ikegami    schedule 16.09.2016
comment
Я добавил P4PORT в команду, но все равно получаю ту же ошибку. Вот моя строка cron: 46 4 * * * P4PORT=ss-5:1666 PERL5LIB=/lib /tmp/test >> /tmp/cronoutput 2>&1 - person polina-c; 17.09.2016
comment
Я думал, что это само собой разумеется, но вам просто нужно реплицировать переменные окружения P4, которые у вас есть в вашей интерактивной среде (set | grep ^P4). Никаких догадок быть не должно! - person ikegami; 19.09.2016

Я обнаружил, что решение состоит в том, чтобы установить env vars в коде perl:

    $ENV{'P4PORT'} = '...';
    $ENV{'P4CLIENT'} = '...';
    $ENV{'P4USER'} = '...';
    $ENV{'P4PASSWD'} = '...';
person polina-c    schedule 17.09.2016
comment
Настройка этих переменных среды — это то, что вам предлагает существующий ответ. Однако. он предлагает установить их в файле crontab, что является гораздо лучшим решением, чем жесткое кодирование данных конфигурации в вашем сценарии. Это плохое решение. - person ikegami; 03.01.2017
comment
@ikegami, существующее решение не объясняет, как именно установить их в файле crontab. Если бы вы могли добавить эту информацию, это очень помогло бы. Спасибо. - person polina-c; 04.01.2017
comment
Если вы не можете определить, как устанавливать переменные в crontab после прочтения документации (man 5 crontab), не стесняйтесь задавать вопросы по этому поводу. Вы также можете попросить оболочку установить их (VAR=val command). - person ikegami; 04.01.2017
comment
@ikegami, я считаю, что цель stackoverflow - предоставить целенаправленные и полные ответы на вопросы людей, даже если ответы можно найти в документации. - person polina-c; 04.01.2017
comment
Да, в самом деле. Вот почему я сказал, что вы можете свободно задавать этот вопрос. На самом деле об этом уже задавали вопрос. - person ikegami; 05.01.2017
comment
Прохладный. Не могли бы вы добавить эту ссылку в свой ответ, чтобы сделать его лучшим? - person polina-c; 10.01.2017
comment
@ikegami, я добавил ссылку в твой пост и отметил ее как наиболее полезную. - person polina-c; 12.01.2017