Перейти к содержимому
Калькуляторы

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

Есть такой 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").

 

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

FreeBSD ?

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

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 


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

 

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

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1 час назад, st_re сказал:

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

 

 

 

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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").

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тьфу ты.

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

10 минут назад, alibek сказал:

Тьфу ты.

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

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

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

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

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

 

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.