[shell] перезапускалка для процесса
#!/bin/bash
while [ true ]
do
sleep 1
x=`ps aux | grep firefox | grep -v grep`
if [[ $x != "" ]]
then
echo "Firefox started!"
fi
done
crontab -e
> проверять наличие процесса по имени.
pkill -0
---
Q47: а где нетварь?
A47: скоро должна сдохнуть.
> if [[ $x != "" ]]
Тут ошибка.
> while [ true ]
Это, кстати, не менее гениально.
---
A24: Проявления suxx-а неисчислимы.
if `ps aux | grep <имя процесса> | grep -v grep >/dev/null 2&>1`; thenПочему-то всегда выполняется ветка else.
....
else
.....
fi
В такой конструкции ps aux... должно быть без обратных кавычек.
Daemon Tools тебе не помогут?
для джавы есть такая штука - javawrapper которая это делает
Горе-программисты...
$ cd /bin
$ `echo ls`
[ cpio domainname kill mt rcmd sleep
cat csh echo ksh mv rcp stty
chio date ed ln pax rm sync
chmod dd expr ls ps rmdir tar
cp df hostname mkdir pwd sh test
$
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
$ a="init"; if test -n "`pgrep -x $a`"; then echo started; else echo not started; fi
a="init"; if test -n "`pgrep -x $a`"; then echo started; else echo not started; fi
if pgrep init; then echo started; else echo not started; fi
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
Любишь писать мусор в stdout?
он уже давно написал правильную команду - pkill вместо ваших изварщений с grep/pgrep.
# which pkill
which: 0652-141 There is no pkill in ...
uname -то хоть там есть?
melchior:~$ which pkill
/usr/bin/pkill
Лучше бы поспрашивал как iptables настроить, а не велосипеды с квадратными колёсами писал.
melchior:~$ which pkill
Мне тут недавно указали, что "which" --- это нестандартный бсдизм,
растущий из csh, а стандартное (POSIX) средство --- "command -v".
---
"This user is BSD-compliant."
> Мне тут недавно указали, что "which" --- это нестандартный бсдизм,
растущий из csh, а стандартное (POSIX) средство --- "command -v".
---
"This user is BSD-compliant."
В итоге сделал так:
*/5 * * * * if pkill -0 _имя_процесса_ >/dev/null 2>&1;then echo "">/dev/null;else sleep 30s;....;fiПустая команда в ветке then - просто заглушка (как инвертировать выполнение в if, я не нашёл).
Ответ 'у: текущее положение дел с iptables меня пока устраивает (а больше никому мешать не может) и, следовательно, нормальный вариант представляет лишь теоретический интерес. А регулярно мониторить поисковик и делать одни и те-же действия для перезапуска уже немного надоело.
# uname -a
AIX ... 3 5 0002B555D600
поисковикЕго бинарник нужно либо в gdb, либо в /dev/null вместо того эха.
search.local почему не падает? Тоже постоянный reincarnation?
мне самому не нравится это решение, но пока-что нет времени разбираться.
The format for a pipeline is:
[!] command1 [| command2 ...]
...
If the reserved word ! does not precede the pipeline, the exit status is
the exit status of the last command specified in the pipeline. Other-
wise, the exit status is the logical NOT of the exit status of the last
command. That is, if the last command returns zero, the exit status is
1; if the last command returns greater than zero, the exit status is
zero.
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
Built-ins
...
: A null command that returns a 0 (true) exit value.
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
Whip me. Beat me. Make me maintain AIX.
— Stephan Zielinski
А по каким словам это ищется в манах?
используемого языка, ни семантики его конструктов?
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
Оставить комментарий
Andbar
Я в программировании под линуховый шелл не разбираюсь, максимум что могу - несколько команд скомпоновать. Может быть кто-нибудь подскажет, как сделать следующее?Нужно в цикле каждые 5 минут проверять наличие процесса по имени. (тут проблема в том, что команда ps aux|grep имя, которую я обычно выполняю вручную, выдаёт иногда сам grep, а иногда - не выдаёт).
Если процесс не найден, нужно подождать ещё минуту, выполнить пару команд и вернуться к циклической проверке процесса.