Решено, абы как: Не работает скрипт

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Решено, абы как: Не работает скрипт

Сообщение azsx »

Есть скрипт на баш

Код: Выделить всё

!/bin/bash
 #$stroka=$(ps aux | grep svyaz | wc -l)
 $stroka=$(ps aux | grep svyaz |wc -l)

 if [ "$stroka" > 1 ]
 then {
         echo "yes"
 }
 else {
         echo "no"
         bash ./svyaz.sh &
 }
 fi;

Суть скрипта в этой команде:

Код: Выделить всё

ps aux | grep svyaz |wc -l

Команда выводит число запущенных процессов и не дает им запускаться если уже один скрипт svyaz запущен. Проблема заключается в том, что на одном компьютере скрипт работает, а на втором компьютере не рабтает. То есть условие всегда не равно, всегда идет запуск скрипта. Отличием обоих компьютьеров смог найти только в одном, команда

Код: Выделить всё

sudo aptitude show coreutils
 Пакет: coreutils
 Пакеты первой необходимости: да
 Состояние: установлен
 Автоматически установлен: нет
 Мульти-архитектура: сторонняя
 Версия: 8.21-1ubuntu5.4

На компьютере где скрипт не работает выдает ubuntu5.4, а на котором работает выдает ubuntu5.3.
Что делать?
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21433
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Решено, абы как: Не работает скрипт

Сообщение Bizdelnick »

Ошибка здесь:
azsx писал(а):
11.07.2016 10:48

Код: Выделить всё

$stroka=$(ps aux | grep svyaz |wc -l)

надо

Код: Выделить всё

stroka=...


Ну и см. передать в kill id процесса
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Решено, абы как: Не работает скрипт

Сообщение SLEDopit »

azsx писал(а):
11.07.2016 10:48
if [ "$stroka" > 1 ]
это тоже работать не будет. if [ "$stroka" -gt 1 ] нужно.

и скобки фигурные не нужны
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
Vascom
Сообщения: 1699
ОС: Fedora 32

Re: Решено, абы как: Не работает скрипт

Сообщение Vascom »

А ещё неправильно использовать сравнение ">" внутри одинарных квадратных скобок. Во-первых, таким образом сравниваются не числа, а значения в соответствии с алфавитным порядком таблицы символов ASCII. Во-вторых, даже в этом случае знак ">" надо экранировать.

Числа сравниваются либо через "-gt" внутри одинарных квадратных скобок, либо через ">" внутри двойных круглых скобок. Вот http://www.bash-scripting.ru/abs/chunks/ch07s03.html
Спасибо сказали:
Аватара пользователя
yars
Сообщения: 1147
Статус: Slacker!
ОС: Slackware64-current

Re: Решено, абы как: Не работает скрипт

Сообщение yars »

А еще, если научите ваш svyaz.sh создавать lock-файлы и при запуске делать

Код: Выделить всё

 if [ -f $LOCKFILE ]; then
  echo "Another instance of $SCRIPTNAME is running, remove the lock and try again."
  exit 1
fi
то все вообще хорошо будет. man lockfile в помощь.
Slackware64-current/Xfce/Xiaomi Mi Notebook Pro 15.6 | Arch Linux/Xfce/Lenovo G580
-------------
Registered Linux User #557010
Спасибо сказали:
azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Re: Решено, абы как: Не работает скрипт

Сообщение azsx »

борюсь со скриптом. Поражает, что на более старой версии coreutils работает первый вариант скрипта, а вот на втором компе приходится велосипедить. Сейчас работает такой вариант:

Код: Выделить всё

#!/bin/bash
stroka=$(ps aux | grep svyaz | wc -l)
echo "Всего зафиксировано процессов $stroka"

if  [ $(ps aux | grep svyaz | wc -l) -le 4 ]
then {
        echo "yes"
        bash ./svyaz.sh &

}
fi;

Соотвественно переменная и echo используется просто для красоты, работает всё с условия. Непонятности...
В строке [ $(ps aux | grep svyaz | wc -l) -le 4 ] я в квадратных скобках отверяю условие, если оно истинно - то запускаю скрипт svyaz, если ложно - то не запускаю его. Верно? Совсем не понимаю, почему на этом компьютере отверяется именно с 4, чтобы определить наличие только одной копии скрипта svyaz командой ps. То есть если я ставлю 2 (как на компьютере со старой coreutils), то срабатывания на истину не происходит. Вот почему так?
Спасибо сказали:
Аватара пользователя
Vascom
Сообщения: 1699
ОС: Fedora 32

Re: Решено, абы как: Не работает скрипт

Сообщение Vascom »

Введи ps aux | grep svyaz в консоли и увидишь.
Спасибо сказали:
azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Re: Решено, абы как: Не работает скрипт

Сообщение azsx »

ввожу

Код: Выделить всё

ps aux | grep svyaz | wc -l
2

и вижу два. Вполне логично, 1 процесс реальный скрипт, второй сам ps.
Но новый скрипт работает только при значении в 4 (четыре).
Спасибо сказали:
Аватара пользователя
Vascom
Сообщения: 1699
ОС: Fedora 32

Re: Решено, абы как: Не работает скрипт

Сообщение Vascom »

Тогда сделай вывод этого значения из скрипта. Как называется твой скрипт? Может там тоже есть svyaz в названии и это значение равно 3?
И выводи без | wc -l, чтобы видеть конкретные строки, так понятнее будет.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21433
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Решено, абы как: Не работает скрипт

Сообщение Bizdelnick »

azsx писал(а):
13.07.2016 06:57
Вот почему так?

Bizdelnick писал(а):
11.07.2016 10:59
см. передать в kill id процесса

Не надо никогда, ни при какой погоде, пытаться парсить вывод таких утилит, как ps или ls. Они на это не рассчитаны.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Re: Решено, абы как: Не работает скрипт

Сообщение azsx »

Действительно, я совсем забыл, что скрипт с которого запускаю проверку также имеет svyaz в имени. Как мог появится четвертая строчка не понятно, но, наверное, регистрируется svyaz запускаямая от cron. То есть если я вручную запускаю скрипт из консоли, то надо проверять 3. А если по крон - то 4.
Загадкой также остается почему на более старой версии coreutils работает первоначальный вариант.
Пофиг, решил оставить рабочее решение как есть.
зы
Bizdelnick спасибо, я читал вашу ссылку только не понял. Смысл в том, что ps не рабочий? Я вот как то слабо понимаю как под мой пример ваш способ приспособить.
У меня задача, надо сделать аналог радмин неубиваемый, если убьют процесс. В моем способе плохо только то, что может цифра в х11 сместиться, то есть:

Код: Выделить всё

x11vnc -usepw -display :1

один на конце, а не ноль как по умолчанию. Но процессы на самом деле будут убивать крайне редко.
Спасибо сказали:
MiK13
Сообщения: 1289
ОС: Linux Debian

Re: Решено, абы как: Не работает скрипт

Сообщение MiK13 »

А не лучше ли вместо ps aux | grep svyaz использовать pgrep -lx svyaz ?
Правда, недавно обнаружил, что pgrep в jessie почему-то работает не так, как в предыдущих версиях Debian. А именно, если раньше для выдачи полной строки (с аргументами) надо было использовать -f, то в jessie надо использовать -a
Спасибо сказали: