LINUX.ORG.RU

не хочет работать bash скрипт

 


0

1

Делаю проверку на работу програмки, если она не работает чтобы запускало. В крипте не работает ключ -eq 0. ПРобовал заменить на >'0' или >/dev/null - работает, но запускает дубликаты. Как выяснить почему не хочет работать -eq 0



Последнее исправление: User01 (всего исправлений: 1)
Ответ на: комментарий от YAR
ms=`ps -A|grep ms|wc -l`
echo "proverka ms"

if [ $ms -eq 0 ]; then
	echo "zapustil"
	# Пытаемся запустить сервис
	cd /ms2/
	./start_ms_screen.sh
	# "Вздремнем" на секундочку (так, на всякий пожарный)

fi
User01
() автор топика
Ответ на: комментарий от AITap

собственно ничего не поменяло это,

ms=`ps -A|pgrep ms|wc -l`
echo "proverka ms"

if [ $ms -eq 0 ]; then
	echo "zapustil"
	# Пытаемся запустить сервис
	cd /ms2/
	./start_ms_screen.sh
	# "Вздремнем" на секундочку (так, на всякий пожарный)

fi

не проходит именно на -eq 0

root@web:/ms2# ./ms_restart.sh
proverka ms
root@web:/ms2#

User01
() автор топика

Я не увидел не одной строчки, зачем вообще делать этот скрипт на баше. Лучше выбрось его, полей бензином, сожги и посыпь известью.

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

Имелось в виду pgrep вместо ps, а не вместо grep. =)

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

Да скрипт работает нормально на другой VPS, а на этой отказывается. Не понимаю почему. Сжечь всегда успеем)

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

Я тоже не знаю. Ради интереса попробовал переписать на ruby.

#!/usr/bin/ruby
puts "Checking ms"
if `ps -A|pgrep ms|wc -l`.to_i.zero?
	puts "Executing"
	#system "/ms2/start_ms_screen.sh"
end

Вывод:

Checking ms
Executing

Выкинь баш. Выучи перл, питон, руби, не пожалеешь.

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

У меня есть предположение, что выражение ps -A|pgrep ms|wc -l Выдает по-сути 0\n, может из-за этого и психует баш. Но это лишь предположение.

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

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

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

Да я так и понял, конечно. А ты можешь полностью описать программную конфигурацию? Что за $SHELL, ОС и т.п.?

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

Если не понимаешь почему - добавляй в скрипт больше контрольных меток. Не проходит проверка переменной? Выведи содержимое переменной до проверки. И да, больше кавычек.

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

Твой вариант считает количество запущенных не только 'ms', но и любых, содержащих ms.
Вместо 'ps ... | grep...' используй 'pgrep -x ms', кроме того, wc там ни к чему, достаточно кода возврата.

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

Или так, да. Но «свои» метки помогут быстрее сориентироваться в своем скрипте

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

Ну я думаю, что отрезать перенос строки не проблема. Какой шелл? Вряд ли более-менее современные баши так бы сильно отличались в работе из-за переноса строки. Обрезать конец строки легко - к примеру echo «stroka» | xargs echo -n Но я не думаю, что в этом проблема. Попробуй, тогда ps -A|pgrep ms|wc -l|xargs echo -n

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

ps -A|pgrep ms|wc -l|xargs echo -n убрало 0\n, но всеравно тормозится на if [ $ms -eq 0 ]; then и не идёт дальше

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

получается оно выдает 0\n

Бред, `` или $() удаляют хвостовые \n.
Вставь 'echo ms=\'${ms}\' ' перед проверкой и убедись, что там не 0.
Проверить, что «не помогает» именно 'pgrep -x' ты просто не мог успеть.

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

Благодарю, как оказалось подобных процессов было запущено 3, а я винил функцию. Проверка echo ms=\'${ms}\'окончательно решила данный вопрос)

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

Спасибо всем за оперативную помощь)

User01
() автор топика

После запуска программы, записать её пид куда-нибудь в файл (/var/run/program.pid). А вообще, не городить ерунду, а взять специализированное решение на такой случай - какой-нибудь supervisord хотя бы.

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