Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Некорректная отработка bash-скрипта через cron  (Прочитано 1034 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн izobara

  • Автор темы
  • Новичок
  • *
  • Сообщений: 22
  • Every day is sysadmin day!
    • Просмотр профиля
Доброго дня многоуважаемые камрады!
Есть некий скрипт, задача которого проводить автопул с gitolite на сервере с Ubuntu Server 16.04 с установленной VESTA CP
Его задача прочитать список пользователей, собрать список доменов для каждого пользователя (это необходимо для формирования пути к GIT директории), далее читает используемую ветку и выполняет апдейт
(Нажмите, чтобы показать/скрыть)
При ручном запуске все отрабатывает на ура и лог выглядит следующим образом (домены спрятаны за *** в целях безопастности)
(Нажмите, чтобы показать/скрыть)
При добавлении скрипта в крон разными способами и с заворачиванием вывода даже в самую глубокую /dev/null скрипт запускается, но pull не проходит и результат в логах следующий
(Нажмите, чтобы показать/скрыть)
Складывается впечатление, что при запуске через крон не отрабатывает часть, которая начинается с for
Свою проблему гуглил, но так и не нашел решения. Нужна Ваша помощь!
Заранее всем благодарен.
« Последнее редактирование: 13 Апрель 2017, 12:35:13 от izobara »

Оффлайн Morisson

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 4588
    • Просмотр профиля
izobara, Пусть твой скрипт называется script.sh
Создай другой с названием script1.sh:
#!/bin/bash
xterm -e ./путь/к/скрипту/script.sh
Вставь в cron script1.sh

Оффлайн izobara

  • Автор темы
  • Новичок
  • *
  • Сообщений: 22
  • Every day is sysadmin day!
    • Просмотр профиля
izobara, Пусть твой скрипт называется script.sh
Создай другой с названием script1.sh:
#!/bin/bash
xterm -e ./путь/к/скрипту/script.sh
Вставь в cron script1.sh

Прошу прощения, не указал, что Ubuntu Server 16.04
Соответственно при попытке запуска получаю, я так понимаю из-за отсутствия X-ов
Warning: This program is an suid-root program or is being run by the root user.
The full text of the error or warning message cannot be safely formatted
in this environment. You may get a more descriptive message by running the
program as a non-root user or by removing the suid bit on the executable.
xterm: Xt error: Can't open display: %s
xterm: DISPLAY is not set

Оффлайн Morisson

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 4588
    • Просмотр профиля
izobara, ага))

Пользователь добавил сообщение 13 Апрель 2017, 12:44:49:
izobara, покажи, как в cron добавил?

Оффлайн izobara

  • Автор темы
  • Новичок
  • *
  • Сообщений: 22
  • Every day is sysadmin day!
    • Просмотр профиля
Morisson,
root@307:/# cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
44 * * * * root cd / && run-parts --report /etc/cron.hourly
39 3 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
53 3 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
4 2 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

# GIT Autopull
* * * * * root /bin/bash /opt/scripts/git_autopull.sh >> /dev/null 2>&1

Пробовал по разному

Оффлайн Morisson

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 4588
    • Просмотр профиля
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
/opt/scripts/git_autopull.sh

Попробуй положить скрипт в одну из папок или кинь туда симлинк:
sudo ln -s /opt/scripts/git_autopull.sh /usr/bin

Оффлайн izobara

  • Автор темы
  • Новичок
  • *
  • Сообщений: 22
  • Every day is sysadmin day!
    • Просмотр профиля
Morisson, к сожалению не помогло... :(
Может в скрипте что-то не так?

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2628
    • Просмотр профиля
Скрипт:
#!/bin/bash

# GIT autopull v.0.0.2-alpha

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

VESTABINDIR=/usr/local/vesta/bin
TEMPDIR=/tmp/git_update

mkdir $TEMPDIR
mkdir $TEMPDIR/domainlists
mkdir $TEMPDIR/branches

echo "Start pull at $(date)" >> /var/log/testing.log

# Start update
$VESTABINDIR/v-list-users plain | awk '{print $1}' \
| while read user
do
# Creating domain lists for everyone user
$VESTABINDIR/v-list-web-domains $user plain | awk '{print $1}' \
| while read domain
do
{
cd /home/$user/web/$domain/public_html
mkdir $TEMPDIR/branches/$user
git branch | awk '{print $2}' > $TEMPDIR/branches/$user/$domain.tmp  # For debug
git pull origin $(cat $TEMPDIR/branches/$user/$domain.tmp)
chown -R $user /home/$user/web/$domain
echo "Pull done for $domain" >> /var/log/testing.log
} &> /dev/null
done
done

echo "Pull done at $(date)" >> /var/log/testing.log
echo "--------------------------------------------" >> /var/log/testing.log
rm -rf $TEMPDIR

sudo chmod +x /opt/scripts/git_autopull.sh
В крон:
# GIT Autopull
* * * * * /opt/scripts/git_autopull.sh

Оффлайн izobara

  • Автор темы
  • Новичок
  • *
  • Сообщений: 22
  • Every day is sysadmin day!
    • Просмотр профиля
renzrv, увы, но ничего не поменялось.
При ручном запуске отрабатывает успешно.
С крона - нет.

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2628
    • Просмотр профиля
При ручном запуске отрабатывает успешно.
От рута запускал? (с sudo)

Оффлайн izobara

  • Автор темы
  • Новичок
  • *
  • Сообщений: 22
  • Every day is sysadmin day!
    • Просмотр профиля
Re: Некорректная отработка bash-скрипта через cron
« Ответ #10 : 13 Апрель 2017, 14:00:34 »
renzrv, да, я от пользователя root и работаю

Оффлайн ALiEN175

  • Модератор форума
  • Старожил
  • *
  • Сообщений: 4309
  • Capture the truth
    • Просмотр профиля
Re: Некорректная отработка bash-скрипта через cron
« Ответ #11 : 13 Апрель 2017, 14:06:27 »
izobara,  заворачивайте не в /dev/null, а в лог. Соответственно, все перенаправления "в никуда" из скрипта убрать, а в крон такую строку положить:

Код: Bash
  1. * * * * * root /bin/bash /opt/scripts/git_autopull.sh >> /var/log/git_autopull.log 2>&1

потом смотрите что там в /var/log/git_autopull.log происходит.
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Nvidia 8500GT :: XFCE
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: XFCE

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2628
    • Просмотр профиля
Re: Некорректная отработка bash-скрипта через cron
« Ответ #12 : 13 Апрель 2017, 14:15:58 »
Покажи вывод set из консоли откуда запускаешь скрипт и он работает.
Добавь в скрипт после "export PATH":
set > /var/log/cron_envи после запуска кроном скрипта, покажи сожержимое var/log/cron_env

Пользователь добавил сообщение 13 Апрель 2017, 14:31:43:
В крон:
* * * * * root /usr/bin/script -a -c "/bin/bash /opt/scripts/git_autopull.sh" /var/log/git_autopull.log
Скрипт:
#!/bin/bash
# GIT autopull v.0.0.2-alpha

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
set > /var/log/cron_env

VESTABINDIR=/usr/local/vesta/bin
TEMPDIR=/tmp/git_update

mkdir $TEMPDIR
mkdir $TEMPDIR/domainlists
mkdir $TEMPDIR/branches

echo "Start pull..."

# Start update
$VESTABINDIR/v-list-users plain | awk '{print $1}' \
| while read user
do
# Creating domain lists for everyone user
$VESTABINDIR/v-list-web-domains $user plain | awk '{print $1}' \
| while read domain
do
cd /home/$user/web/$domain/public_html
mkdir $TEMPDIR/branches/$user
git branch | awk '{print $2}' > $TEMPDIR/branches/$user/$domain.tmp  # For debug
git pull origin $(cat $TEMPDIR/branches/$user/$domain.tmp)
chown -R $user /home/$user/web/$domain
echo "Pull done for $domain"
done
done

rm -rf $TEMPDIR
echo "Pull done"
echo "--------------------------------------------"

« Последнее редактирование: 13 Апрель 2017, 14:31:43 от renzrv »

Оффлайн izobara

  • Автор темы
  • Новичок
  • *
  • Сообщений: 22
  • Every day is sysadmin day!
    • Просмотр профиля
Re: Некорректная отработка bash-скрипта через cron
« Ответ #13 : 13 Апрель 2017, 14:37:28 »
renzrv, HOSTNAME я скрыл

вывод set
(Нажмите, чтобы показать/скрыть)

содержимое /var/log/cron_env пустое

Пользователь добавил сообщение 13 Апрель 2017, 14:41:10:
ALiEN175,
Посыпались ошибки (имена юзеров скрыты)
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 13 Апрель 2017, 14:41:10 от izobara »

Оффлайн Morisson

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 4588
    • Просмотр профиля
Re: Некорректная отработка bash-скрипта через cron
« Ответ #14 : 13 Апрель 2017, 14:42:15 »
izobara, а из крон вообще что-нибудь работает, демон запущен?
sudo systemctl status crond

 

Страница сгенерирована за 0.237 секунд. Запросов: 22.