LINUX.ORG.RU
ФорумAdmin

Проверить выполнение скрипта

 , ,


0

1

Добрый вечер всем,

Вопрос: как лучше проверить, выполняется ли команда в rc.local при загрузке?
Может какие-то if нужны туда еще + в лог отправлять выхлоп.
Подскажите, пожалуйста, кто делал такое и как.
Собственно, у меня там всего лишь синхронизация времени, но на будущее хотелось бы знать, если что:

sleep 60
ntpdate -s &
exit 0


Спасибо заранее.

★★★★★

Ответ на: комментарий от Andrey_Utkin

screen -d -m bash -c «sleep 60; ntpdate -s»

Никогда не юзал screen, что даст эта команда? Где будет выхлоп или лог?

Gonzo ★★★★★
() автор топика

Вопрос: как лучше проверить, выполняется ли команда в rc.local при загрузке?

ну если скрипт самописный, то лучший, наверное, способ - это создание файлов-маркеров. У камрада цельные системы собирались через использование таких маркеров. Довольно большие системы, на десятки виртуалок.

Я ща точно не помню какой там в баше знак (кажется &&)

ntpdate -s && touch /marker &
в случае успеха выполнения ntpdate -s будет создан файл /marker

targitaj ★★★★★
()
Последнее исправление: targitaj (всего исправлений: 1)
Ответ на: комментарий от targitaj

Да там не скрипт, а в rc.local:

sleep 60
ntpdate -s &
exit 0


Все намного проще. Хотел вот узнать, как мониторить выполнение той или иной команды на предмет ее успешного выполнения.

Gonzo ★★★★★
() автор топика
Ответ на: комментарий от Andrey_Utkin

Ок, спасибо, разбираюсь. Полезная штука.

Gonzo ★★★★★
() автор топика
Ответ на: комментарий от Gonzo

если

/etc/rc.local

то это и есть скрипт )))) Просто он написан не тобой.

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exit 0
это обычный скрипт, на него действуют все обычные правила. Одним скриптом ты создаёшь маркеры по факту успешного выполнения или фейла, а другим скриптом проверяешь эти маркеры. Через крон, например. Ну или руками. Главное - не забывать удалять файл-маркер после проверки. Или, как вариант, удалять файл-маркер перед выполнением критичной части скрипта.

targitaj ★★★★★
()

Вопрос: как лучше проверить, выполняется ли команда в rc.local при загрузке?

Выполняется, будь уверен. Проверку добавляй до exit 0

Но.

1. Если ты пытаешься что-то добавить в скрипты инициализации, будь уверен что указываешь полные пути, или убедись что установил PATH

2. В debian в качестве «sh» по умолчанию dash вместо bash. Это многих смущает

router ★★★★★
()
Ответ на: комментарий от Andrey_Utkin

Скорее всего выполнено не будет, из-за отсутствия полных путей

Кроме того, не уверен, но сильно подозреваю, что () работает в bash, но не голом sh. Если так, то не пройдёт.

router ★★★★★
()
Ответ на: комментарий от router

dash вместо bash ???

Охщи... даже не знал.

Gonzo ★★★★★
() автор топика
Ответ на: комментарий от targitaj

ntpdate -s && touch /marker &

в случае успеха выполнения ntpdate -s будет создан файл /marker

Прости, не прочитал твой комментарий. Спасибо, учту.

Gonzo ★★★★★
() автор топика
Последнее исправление: Gonzo (всего исправлений: 1)
Ответ на: комментарий от router

Выполняется, будь уверен. Проверку добавляй до exit 0

У меня вероятно что-то с изложением мыслей... Меня часто не понимают программисты, например. Почему хз.

Проверку добавляй до exit 0

Как? :) Именно за этим я сюда и пришел.

Gonzo ★★★★★
() автор топика
Ответ на: комментарий от Gonzo
(команда && touch /твой_путь/`date +%Y-%m-%d_%H-%M`_succeed) || touch /твой_путь/`date +%Y-%m-%d_%H-%M`_fail

вот у себя в работающей конфигурации нашел. Однострочник, работает по крону. Дубово и надёжно (в реале у меня там команда «рсинк бла бла бла», но это ваще пофиг, лишь бы exit-коды прога нормально выдавала).

targitaj ★★★★★
()
Ответ на: комментарий от targitaj

Вот только что попробовал так:

sleep 60 && ntpdate -s && touch /home/username/ntpdate &
Не создался файл. Если просто запустить потом «touch /home/username/ntpdate» - создается без проблем. В чем может быть дело? В путях?

Gonzo ★★★★★
() автор топика
Последнее исправление: Gonzo (всего исправлений: 2)
Ответ на: комментарий от targitaj

(команда && touch /твой_путь/`date +%Y-%m-%d_%H-%M`_succeed) || touch /твой_путь/`date +%Y-%m-%d_%H-%M`_fail

А как оно понимает, когда succeed, а когда fail?

Gonzo ★★★★★
() автор топика
Ответ на: комментарий от Gonzo

проверка не будет отличаться, просто в некоторых дистрах для того, чтобы /etc/rc.local стал выполняться, нужно включить сервис. Правда, я уже не помню точно в каком дистре сталкивался и имени сервиса.

feofan ★★★★★
()
Ответ на: комментарий от Gonzo

если эксит код команды 0, то выполняется то, что после &&, а если не 0, то выполнится команда после ||. man bash почитай. Правда, учти, что в дебиане sh - dash, как тебе уже писали. Но логические операторы работают одинаково во всех posix-совместимых шелах.

feofan ★★★★★
()
Последнее исправление: feofan (всего исправлений: 1)
Ответ на: комментарий от Gonzo

хм

ntpdate -s ; echo $?
1
оно у меня даёт единицу и под рутом и под обычным пользователем. Команда нормально составлена? Я ntpdate обычно не пользуюсь, не подскажу по ней.
SYNOPSIS
       ntpdate [-bBdoqsuv] [-a key] [-e authdelay] [-k keyfile] [-o version] [-p samples] [-t timeout] server [...]
так ты же сервер не указал с которого синкаться надо

ntpdate -s адрес_сервера_источника_NTP_ЖИ

ясен пень оно 1 даёт

ntpdate gate4; echo $?
30 Mar 20:36:26 ntpdate[24437]: bind() fails: Permission denied
1

из-под обычного юзера не сработает

targitaj ★★★★★
()
Последнее исправление: targitaj (всего исправлений: 5)
Ответ на: комментарий от targitaj
root@playground2:~# ntpdate gate4; echo $?
30 Mar 20:38:23 ntpdate[25886]: adjust time server бла offset -0.000649 sec
0
root@playground2:~# 

во, другое дело. Вот теперь можно всю конструкцию пробовать.

root@playground2:~# ntpdate -s gate4; echo $?
0
root@playground2:~# 
Mar 30 20:40:13 playground2 ntpdate[27501]: adjust time server бла offset 0.000430 sec

targitaj ★★★★★
()
Последнее исправление: targitaj (всего исправлений: 2)
Ответ на: комментарий от targitaj
(sleep 10; ntpdate -s gate4 && touch /root/ntpdate_`date +%Y-%m-%d_%H-%M`_succes) &

отрабатывает из-под рута норм, тока в консоль мусорит. По-хорошему, надо бы в /dev/null весь лишний вывод завернуть, но можно забить

targitaj ★★★★★
()
Последнее исправление: targitaj (всего исправлений: 2)
Ответ на: комментарий от targitaj

так ты же сервер не указал с которого синкаться надо

Тю, блин, я думал оно умеет само ибо прописан сервер «pool.ntp.org» в /etc/default/ntpdate.

ntpdate gate4
gate4

Что такое gate4?

Gonzo ★★★★★
() автор топика
Последнее исправление: Gonzo (всего исправлений: 2)
Ответ на: комментарий от targitaj

Да, теперь работает. Тогда нафига вообще этот /etc/default/ntpdate ? Странный Debian... Ладно, разберусь с этим.

Gonzo ★★★★★
() автор топика
Ответ на: комментарий от Gonzo

туда сустемд впилили, там шаманство какое-то есть с сервисом для старта rc.local, точно не подскажу. Или гугл посмотрите, вроде было про это в большом кол-ве, или местных знатоков «нафигД» зовите.

anc ★★★★★
()
Ответ на: комментарий от anc

туда сустемд впилили, там шаманство какое-то есть с сервисом для старта rc.local

Твою жеж мать... совсем е$%нулись :(
Ок, спасибо.

Gonzo ★★★★★
() автор топика
Ответ на: комментарий от snaf

Меньше незащищенных демонов - крепче сон.

Да и ntpdate, как оказалось, отрабатывает сам при старте машины без каких-либо прописываний куда-либо.

Дело тут не в ntp вовсе, а в ПРОВЕРКЕ, а конкретно: КАКИЕ КОМАНДЫ ПРОПИСАТЬ в тот же rc.local (если изадействован он) или еще где-либо, чтобы я был спокоен, что у меня ОТРАБОТАЛ тот или иной скрипт.

Gonzo ★★★★★
() автор топика
Ответ на: комментарий от snaf

ntpdate у меня был вбит туда ДЛЯ ПРИМЕРА.

Gonzo ★★★★★
() автор топика
Ответ на: комментарий от snaf

ок, повторю, не устану: ntpdate у меня был вбит туда ДЛЯ ПРИМЕРА.

И все же, как решаешь/решал мой вопрос? не сталкивался?

Gonzo ★★★★★
() автор топика
Последнее исправление: Gonzo (всего исправлений: 3)
Ответ на: комментарий от snaf

2) ntp клиента это не должно беспокоить.

Внезапное расхождение по времени и как следствие даун ntpd уже пофиксили?
А то я все еще перестраховываюсь.

anc ★★★★★
()
Ответ на: комментарий от Gonzo

И все же, как решаешь/решал мой вопрос? не сталкивался?

Вы обкурились на первое апреля? Выше 100500 вариантов вам уже описали.

anc ★★★★★
()
Ответ на: комментарий от anc

Меня интересуют различные варианты решения данного вопроса, мало ли.
Тебя лично что-то не устраивает или психика неустойчивая, бро, а?
Вечернюю дозу глицина пропустил?

Gonzo ★★★★★
() автор топика
Ответ на: комментарий от Gonzo

Дарагой. Ты уж звиняй нас «болезных», но можно ты еще раз задаш вопрос. Но так что бы в этом вопросе уже исключались желания ответить: «пути к выполняемой программе должны быть полными» «конструкцию /fullpath/binname>>/logname понимаю» «конструкцию /fullpath/binname && /sbin/shutdown -r -F 0» и т.д. и т.п.

anc ★★★★★
()
Ответ на: комментарий от anc

Внезапное расхождение по времени и как следствие даун ntpd уже пофиксили?

простите что? ntp по дизайну имеет расхождение по времени

snaf ★★★★★
()
Ответ на: комментарий от snaf

простите что? ntp по дизайну имеет расхождение по времени

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

anc ★★★★★
()
Ответ на: комментарий от snaf

Хорошо когда так или иначе большинство берут с инета, но когда завязаны в локальную цепочку этот момент и всплывает.
Можно конечно проверить, на текущий, но я по старинке перестаховываюсь, проверяю по крон запущен ли ntpd и если нет ntpdate && start ntpd

anc ★★★★★
()
Ответ на: комментарий от anc

Да при чем тут вообще пути и прочее. Это все умолчательное.

Я искал решения типа:

1)

if pgrep go.sh; then
    echo running
else
    echo not running
fi

2) есть еще команда watch

и т.д.

Чем больше вариантов - тем лучше. Все ответы выше имеют место быть в разных ситуациях, но везде есть свои нюансы. Так вот эти нюансы умолчательные, меня интересовали РЕШЕНИЯ.

Всем спасибо.

Gonzo ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.