Как проверить в скрипте, запущен ли емерж? [SOLVED]
this 21 мая, 2010 - 13:47
Есть скрипт для показания прогресса сборки, но потребвалось вставить в него проверку -работает ли емерж.И какие-то грабли!
Pidof, ps aux, pgrep -ничего не работает как надо.То "ожидается использвание унарного оператора", то "слишком длинный список аргументов", то просто не работает.
Вот такой вариант рабочий
#!/bin/bash
if [ `pgrep emerge` ] >/dev/null 2>&1; then
exit
else
tail -n 50 /var/log/emerge.log|tac|grep -v "Starting retry"|
grep -iE '([0-9]* of [0-9]*)' -o -m 1|
sed 's/\(.*\) of \(.*\)/\1 \2/'|
awk '{print 100.0*$1/$2}'
fi-но плохо,проверка нормально не работает а этим >/dev/null 2>&1 ругань посылается в дев-нуль.Подозреваю что может из-за того что он на питоне.
Вобщем, как это правильно проверить?
»
- Для комментирования войдите или зарегистрируйтесь

А если так?
if [ `ps aux | grep -c 'emerge'` -lt 1 ]; then exit 2 # Или что Вам заблагорассудится :) else tail -n 50 .... fiНет, не работает. Выводит
Нет, не работает.
Выводит 100, чего быть не должно.
Собственно ps aux | grep -c 'emerge' c незапушенным емержем выводит 1, -gt 0 вобще не работает.
Это я ошибся.
При работающем emerge у меня
ps aux | grep -c 'emerge'выводит 2.(Проверял командой emerge --pretend --update --newuse --deep world)
У меня тоже.Но при -lt 2 всё
У меня тоже.Но при -lt 2 всё равно не работает, выводится 100, резуьтат команд после else которые не должны выполняться.
У меня отрабатывает успешно о_О
Может быть алиасы или другие настройки в .bashrc мешают?
Нет, у рута тоже не
Нет, у рута тоже не работает.
А у рута вобще bashrc не оказалось почему-то!(0_0) Значит он системный юзает, надо-таки сделать ему свой...
...
Конечно, будет выводить "2"
Попробуйте
ps aux | grep 'emerge'и увидете, почему так.>_<
-c, --count Suppress normal output; instead print a count of matching lines for each input file.а эта строка - это просто подпись
genlop -c ?
genlop -c ?
У меня не установлен.Из-за
У меня не установлен.Из-за одного скрипта ставить его глупо.
Вот
#!/usr/bin/python import subprocess, sys ps = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE).communicate()[0] processes = ps.split('\n') nfields = len(processes[0].split()) - 1 for row in processes[1:]: line = row.split(None, nfields) try: if line[nfields].find('/usr/bin/emerge') > 0: print 1 sys.exit(0) except IndexError, e: pass print 0а эта строка - это просто подпись
Тоже не работает.Выводит ноль
Тоже не работает.Выводит ноль и при запушенном и при не запушенном емерже.
Да и ещё и питон, фу.
.
Этого не может быть.
У вас либо кривой питон, либо кривой ps
у вас по ps aux | grep emerge видно "/usr/bin/python2.6 /usr/bin/emerge имя пакета"?
а эта строка - это просто подпись
Вот-вот!Это меня и пугает- то
Вот-вот!Это меня и пугает- то что где-то, что-то не так видимо.Но всё ведь работает.Что и как проверять даже не знаю.
P.S.Немного поспешил- через sudo работает.Но это не вариант, должно юзером проверятся.И юзер в группе portage вобще-то состоит.
P.P.S.
>у вас по ps aux | grep emerge видно "/usr/bin/python2.6 /usr/bin/emerge имя пакета"?
При запущенном видно.
Пальцем в небо :)
Может быть стоит "кореутиль" (sys-apps/coreutils) пересобрать?
Ой... Я по-моему "не в тот лес пошёл" %)
if pgrep -f
if pgrep -f '/usr/bin/emerge'; then echo emerge is running else echo emerge is not running fiif pgrep -f "$(eselect python
if pgrep -f "^$(python-config --exec-prefix)/bin/$(eselect python show) /usr/bin/emerge"; then echo emerge is running else echo emerge is not running fiтак лучше
Да, вот это рабочий
Да, вот это рабочий вариант.
Тоже пришлось добавить >/dev/null 2>&1 , но не из-за ругани а стандартное подавление вывода.Вот так в итоге
#!/bin/bash if pgrep -f '/usr/bin/emerge' >/dev/null 2>&1; then tail -n 50 /var/log/emerge.log|tac|grep -v "Starting retry"| grep -iE '([0-9]* of [0-9]*)' -o -m 1| sed 's/\(.*\) of \(.*\)/\1 \2/'| awk '{print 100.0*$1/$2}' else exit fiСпасибо, решено.
вообще если вы используете
вообще если вы используете "тяжелую артилерию" (я имею ввиду awk), то наверное логичней всю цепочку tail|grep|sed|awk реализовать с помощью одного вызова awk.
Я его не знаю и не люблю.По
Я его не знаю и не люблю.По мне так выкинуть бы его вобще, всё сидом, например, сделать.Но думать надо (а думать сложно (^_^)), а может и невозможно.
Чем его меньше, тем лучше.
P.S.Вот, выкинул -теперь так
-вроде работает,7 пакетов genlop верно показал.Awk тут ненужен )