Запустить/убить процесс одним скриптом

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

winhex
Сообщения: 223
ОС: Debian

Запустить/убить процесс одним скриптом

Сообщение winhex »

Для запуска клиента openvpn используется такая строчка:

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

sudo openvpn --daemon --config config.ovpn --askpass passfile

Нужно, чтобы один скрипт при запуске проверял, запущен ли openvpn, и в случае если нет, запускал его, а если запущен, убивал.
Заранее спасибо
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Запустить/убить процесс одним скриптом

Сообщение SLEDopit »

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

[ -n "$(pidof openvpn)" ] && kill -9 $(pidof openvpn) || sudo openvpn --daemon --config config.ovpn --askpass passfile
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.
Спасибо сказали:
winhex
Сообщения: 223
ОС: Debian

Re: Запустить/убить процесс одним скриптом

Сообщение winhex »

SLEDopit ,спасибо, но я сделал как-то так:

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

if [ "$(pidof openvpn)" ]
    then
    killall openvpn
    else
    openvpn --daemon --config config.ovpn  --askpass passfile
fi


Какой вариант более правильный?
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Запустить/убить процесс одним скриптом

Сообщение SLEDopit »

winhex писал(а):
14.10.2011 12:22
Какой вариант более правильный?
Оба.
Просто вы полностью расписали конструкцию, а я - нет.
По сути if [ smth ] then comm else comm fi то же самое, что и [ smth ] && comm || comm. Просто разные записи.
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.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Запустить/убить процесс одним скриптом

Сообщение watashiwa_daredeska »

SLEDopit писал(а):
14.10.2011 12:43
По сути if [ smth ] then comm else comm fi то же самое, что и [ smth ] && comm || comm. Просто разные записи.
Нет, не то же самое.

Shell

$ if true; then false; else echo fail; fi $ true && false || echo fail fail



Собственно, конструкцию для перезапуска можно записать так:

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

kill $(pidof openvpn) || openvpn --daemon --config config.ovpn --askpass passfile
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Запустить/убить процесс одним скриптом

Сообщение t.t »

SLEDopit писал(а):
14.10.2011 12:43
winhex писал(а):
14.10.2011 12:22
Какой вариант более правильный?
Оба.
Просто вы полностью расписали конструкцию, а я - нет.
По сути if [ smth ] then comm else comm fi то же самое, что и [ smth ] && comm || comm. Просто разные записи.
Не совсем то же самое. В Вашем варианте третья команда выполнится, если _любая_ из первых двух завершится с ошибкой:

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

t $ if true; then false; else echo 'catch you!'; fi
t $ true && false || echo 'catch you!'
catch you!
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Запустить/убить процесс одним скриптом

Сообщение t.t »

watashiwa_daredeska писал(а):
14.10.2011 12:59
Нет, не то же самое.

Shell

$ if true; then false; else echo fail; fi $ true && false || echo fail fail

Синхронно мыслим. (:
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Запустить/убить процесс одним скриптом

Сообщение KiWi »

watashiwa_daredeska писал(а):
14.10.2011 12:59
SLEDopit писал(а):
14.10.2011 12:43
По сути if [ smth ] then comm else comm fi то же самое, что и [ smth ] && comm || comm. Просто разные записи.
Нет, не то же самое.

Shell

$ if true; then false; else echo fail; fi $ true && false || echo fail fail



Собственно, конструкцию для перезапуска можно записать так:

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

kill $(pidof openvpn) || openvpn --daemon --config config.ovpn --askpass passfile


pkill openvpn

P.S.: если совсем точно -- pkill -x openvpn.
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Запустить/убить процесс одним скриптом

Сообщение Ленивая Бестолочь »

KiWi писал(а):
17.10.2011 03:59
pkill openvpn

типа не проверяет, вдруг нет такого. типа не круто :-)
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Запустить/убить процесс одним скриптом

Сообщение watashiwa_daredeska »

Ленивая Бестолоч... писал(а):
18.10.2011 10:17
типа не проверяет, вдруг нет такого. типа не круто :-)
Проверяет. Если такого нет или нет прав на убиение, то возвращает ненулевой статус.
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Запустить/убить процесс одним скриптом

Сообщение Ленивая Бестолочь »

ах ты черт, а я думал он ругнётся.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали: