Jump to content
Калькуляторы

Не работает скрипт с перенаправлением вывода

Есть такой bash-скрипт:

#!/bin/sh

echo "Check payments registry, `date`..."
cd /data/sites/paygate/job
/usr/bin/php -q registry.php

Запускается кроном, примерно так (строчка из кронтаба):

5    *      *   *   *  user   cd /extra/jobs/bm_paygate  && ./payments_registry.sh >> output.log 2>&1

Крон задачу запускает, в логах запись есть:

Sep 20 07:05:01 srv-svc03 /USR/SBIN/CRON[8422]: (user) CMD (  cd /extra/jobs/bm_paygate  && ./payments_registry.sh >> output.log 2>&1)

Но скрипт не работает, в output.log ничего не добавляется.

Если файл output.log удалить, то после срабатывания крона появляется пустой файл output.log (нулевой длины).

 

Самое интересное и непонятное.

Захожу на сервер под пользователем user.

Выполняю команду cd /extra/jobs/bm_paygate — успешно.

Выполняю команду ./payments_registry.sh — успешно, выводится текст "Check payments registry", затем php-скрипт выполняется и выводит какой-то текст.

Выполняю команду ./payments_registry.sh >> output.log 2>&1 — проблема повторяется, скрипт не работает, в output.log вывода нет (даже "Check payments registry").

 

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

Но в этом раз я свободное места проверил, его много.

Что еще тут может быть?

Share this post


Link to post
Share on other sites

FreeBSD ?

Попробуйте без  2>&1

Не помню, что конкретно, но у sh какие-то заморочки с этим бывают.

 

#echo "bla-bla" >> /tmp/bla-bla.txt 2>&1
Неоднозначное перенаправление вывода.

В bash такое прокатывает без проблем.

Share this post


Link to post
Share on other sites
2 часа назад, alibek сказал:

 


5    *      *   *   *  user   cd /extra/jobs/bm_paygate  && ./payments_registry.sh >> output.log 2>&1

 

на почту юзеру user чтото прилетает ? по идее туда должен свалиться stderr от вашего скрипта при таком наборе перенаправлений. Ну или перенесите 2>&1 до >> output

 

 

 

Share this post


Link to post
Share on other sites

Крон вроде как работает от обрезанного окружения, там многих переменных окружения нет.

Share this post


Link to post
Share on other sites
1 час назад, st_re сказал:

на почту юзеру user чтото прилетает ? по идее туда должен свалиться stderr от вашего скрипта при таком наборе перенаправлений. Ну или перенесите 2>&1 до >> output

 

 

 

Да это sh то ли не умеет/не знает, то ли синтаксис 2>&1 другой. 

echo "bla-bla" 2>&1 >> /tmp/bla-bla.txt
Неоднозначное перенаправление вывода.

P.S. Походу не умеетсовсем не умеет

Share this post


Link to post
Share on other sites

cd в некоторых системах не является отдельной командой и выполняется оболочкой. Поэтому в ряде случаев при выполнении через cron нужно писать что-то вроде bash -c "cd /qwe/asd ; ./zxc"

Может быть у автора та же проблема?

Share this post


Link to post
Share on other sites
11 минут назад, TheUser сказал:

cd в некоторых системах не является отдельной командой и выполняется оболочкой. Поэтому в ряде случаев при выполнении через cron нужно писать что-то вроде bash -c "cd /qwe/asd ; ./zxc"

Может быть у автора та же проблема?

Эх.. Диагональное чтение детектед..

 

4 часа назад, alibek сказал:

Выполняю команду ./payments_registry.sh — успешно, выводится текст "Check payments registry", затем php-скрипт выполняется и выводит какой-то текст.

Выполняю команду ./payments_registry.sh >> output.log 2>&1 — проблема повторяется, скрипт не работает, в output.log вывода нет (даже "Check payments registry").

 

Share this post


Link to post
Share on other sites

Тьфу ты.

Кончилось место на диске.

Глаз замылился, был уверен, что /extra/jobs это симлинк на отдельный раздел, а оказалось, что нет.

Так что никаких загадок, причина та же, что в прошлый раз.

Share this post


Link to post
Share on other sites
10 минут назад, alibek сказал:

Тьфу ты.

Кончилось место на диске.

Глаз замылился, был уверен, что /extra/jobs это симлинк на отдельный раздел, а оказалось, что нет.

Так что никаких загадок, причина та же, что в прошлый раз.

Га-га-га! Я пАдстАлом.. :-)

Развел диспут, а дело было как всегда, не в бабине..

 

P.S. Но то, что написал про sh, действительности соответствует на все 100%. 

Сам с этим безуспешно пытался бороться.. Отчего и так упрямо "наезжал на оппонентов". :-)

По-видимому, у Вас sh -это симлинк на bash. "Чистый sh" точно не умеет - проверял на фре, где bash не установлен.

Share this post


Link to post
Share on other sites

Что бы не зависеть от версий шелла или системДы, не проще ли в самом скрипте указывать и шелл, какой использовать, и вывод, куда редиректить?

Share this post


Link to post
Share on other sites

А чем бы это помогло?

Тут причина в невнимательности, я ошибочно посчитал, что свободное место на диске есть.

Я вначале забыл указать, что этот скрипт более года нормально работал, так что проблема точно не в особенностях крона или шелла.

Share this post


Link to post
Share on other sites

Конкретно в данном случае нет - не помогло. Но в будущем, в разных случаях, например, когда будете переползать с крона на системд, очень даже поможет не переписывать кучу своих скриптов. :) Не мешает вырабатывать стиль написания скриптов и программ, дабы избавить себя от множества проблем в будущем.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this