PDA

Просмотр полной версии : Cron и perl.


Arsak
06.01.2007, 13:06
Возникла проблема с перл-скриптами: если их запускаешь вручную в шелле, то они отрабатывают замечательно. Но запускаться через крон (даже из рутового кронтаб) не желают совершенно. Чисто экспериментальным путём удалось их всё-таки запускать из крона, но это потребовало следующих манипуляций: перл-скрипт заворачивался в шелл-скрипт; причём в шелл-скрипте обязательно первой строкой должна быть команда cd /путь_к_директории_с_перл-скриптом, без неё никак (второй командой является собственно запуск перл скрипта :) ).
Вобщем получилась такая, мягко говоря, неизящная конструкция. Также стало грустно от того, что для каждого перл-скрипта, чтобы запускать его через крон, надо писать дополнительный шелл-скрипт из трёх строк :rolleyes:. (А кроме перл есть и другие скриптовые языки - у них тоже может такая же проблема с запуском через крон.)
Вобщем решил поискать более рациональный способ запуска перл-скриптов через крон (т.е. напрямую без примитивной шелл-обёртки). В инете ничего толкового по этому вопросу не нашёл. А на форумах надменный стёб по этому вопросу обычно заканчивался советом: "Поставь cd /путь_к_директории_с_перл-скриптом в начале скрипта". :rofl:
И тут я подумал - может такой супер-специалист как Артур сталкивался с такой проблемой и сможет помочь? :)

Артур Крюков
06.01.2007, 14:07
мне надо посмотреть первые 5 строк скрипта и строку из кронтаб.

Arsak
06.01.2007, 18:28
первые 5 строк скрипта (без учёта пустых строк):
#! /usr/bin/perl
use DBI;
$var1=value1
(и далее 2 строки - тоже определение переменных)

строка в кроне (та, которая без sh-обёртки не срабатывает):
30 01 * * * /абсолютный_путь_к_pl-файлу

((в перл-скрипте пробовался вариант
#! /usr/bin/perl -w
, но это ничего не изменило))

Артур Крюков
07.01.2007, 12:07
> если их запускаешь вручную в шелле, то они отрабатывают замечательно.

т.е. заходите в любую директорию и везде запускается?

Arsak
09.01.2007, 22:36
т.е. заходите в любую директорию и везде запускается?
спасибо за наводящую мысль :) - чуть не забыл, что перл ищет модули либо в директории скрипта, либо в стандартных директориях из @INC
в запускаемом через крон скрипте есть вызов через system ещё одного perl-скрипта, функции которого оформлены в самописный модуль; естесственно, что и оба скрипта, и pm-файл находились в одной директории (при запуске из которой в шелле всё и проходило замечательно); а крон искал pm-файл либо в $HOME кронтаба, либо в @INC
вобщем проблема решилась добавлением во второй скрипт
use lib "/путь_в_скриптовую_директорию";

Артур Крюков
10.01.2007, 11:41
спасибо за наводящую мысль :)

пжалуста :)