У меня есть сценарий Perl, работающий нормально. на машинах unix и вручную от пользователя root, но не из crontab на машине linux:
проблемная команда: su - $ user
system("su - togui103 -c \"/home/togui103/RunEnv/scripts/tomcatkill.csh\"");
команда на crontab:
23 59 * * * /home/togui103/RunEnv/scripts/tc-rotate.pl > /home/togui103/RunEnv/scripts/tc-rotate.log
пожалуйста, порекомендуйте.
Первое, что нужно сделать, это захватить stderr из вашего скрипта.
23 59 .../tc-rotate.pl 2>/tmp/script.log >/home/...
а затем проверьте журнал на наличие сообщений об ошибках
РЕДАКТИРОВАТЬ: Отвечая на комментарий:
Записи в crontab имеют довольно ограниченную среду, поэтому перечисленные вами переменные среды недоступны, хотя вы можете установить их в своем crontab файл например
APACHE_HOME=/some/path
CATALINA_HOME=/some/other/path
RUN_ENV=someValue
23 59 * * * /home/togui103/RunEnv/scripts/tc-rotate.pl > /home/togui103/RunEnv/scripts/tc-rotate.log
Если переменные заданы в рамках вашего Perl-скрипта, попробуйте su -m
-m, --preserve-environment не сбрасывать переменные среды
Ваша команда может быть:
system("su -m togui103 -c \"/home/togui103/RunEnv/scripts/tomcatkill.csh\"");