fat0troll 24.04.2012 18:30
Tips & tricks — Простой запрет запуска нескольких копий процесса
Опционально — с графическим оповещением.Суть — простейшая строка:
1 |
|
Да, я в курсе про pgrep, но он работает не всегда и не везде.
Если вы хотите запихнуь такую проверку в скрипт (лежащий, например, в /usr/local/bin), делайте так:
1 |
|
иначе оно всегда будет думать, что процесс запущен.
Для графического оповещения можно использовать zenity:
1 |
ps aux | grep process | grep -v grep | grep -v /usr/local/bin/process.sh && zenity --error --text "Процесс уже запущен." || /usr/bin/process
|
Юзайте.
Придумано за 10 минут в попытках борьбы с такой проблемой: есть скайп, в котором включена автоавторизация, и есть невнимательный юзер, могущий запустить его кучу раз. Фигня в том, что автоавторизация слетает, когда появляется второй процесс скайпа. Данный скрипт залатал данную проблему.
#!/bin/sh
if ! [ "$(pidof $@)" ] ; then $@ ; fi
if ! [ "$(pidof $@)" ] ; then $@ ; fi
Может тогда
pidof $1 >/dev/null || $@
или
if ! pidof $1 >/dev/null; then $@; fi
?
pidof $1 >/dev/null || $@
или
if ! pidof $1 >/dev/null; then $@; fi
?
Может просто не стоять. Сталкивался на нескольких шаред-хостингах. А поставить правов нету.
Можно. Но бывает:
* Особо параноидальные админы, у которых home в noexec,
* Необходимость написать скрипт знакомому, и совсем неохота ему объяснять, что надо доставлят pgrep,
* Сделать скрипт, который будет работать на большом парке серверов, и не факт что на всех них будет pgrep.
Так что это как раз тот случай, когда стоит знать несколько подходов.
* Особо параноидальные админы, у которых home в noexec,
* Необходимость написать скрипт знакомому, и совсем неохота ему объяснять, что надо доставлят pgrep,
* Сделать скрипт, который будет работать на большом парке серверов, и не факт что на всех них будет pgrep.
Так что это как раз тот случай, когда стоит знать несколько подходов.
Не будет работать, если захочешь запустить по процессу в каждом экземпляре LXC.
В общем, не изобретай велосипед, а бери проверенный upstart или start-stop-daemon.
В общем, не изобретай велосипед, а бери проверенный upstart или start-stop-daemon.
flock -n /tmp/MyScript.lock -c MyScript.sh || kdialog --error 'Already running'
Тогда не понадобится дополнительно грепать grep -v grep