Задать вопрос

Как переписать скрипт чтоб без pgrep?

часть скрипта
is_running() {
  PID_RUNNING=$(pgrep -nf "$NFQWS_BIN" 2>/dev/null)

  if [ -z "$PID_RUNNING" ]; then
    return 1
  fi

  if [ ! -f "$PIDFILE" ]; then
    return 1
  fi

  PID_SAVED=$(cat "$PIDFILE" 2>/dev/null)
  if [ "$PID_RUNNING" -ne "$PID_SAVED" ]; then
    return 1
  fi

  if ! kill -0 $PID_SAVED; then
    return 1
  fi

  # 0 = true, 1 = false
  return 0
}

проблема в том что в busybox нету pgrep
есть только
arp ash awk brctl bunzip2 bzcat cat chgrp chmod chown clear cp cut date dd depmod df dhcprelay diff dmesg du echo egrep eject env false fgrep find flash_eraseall flash_lock flash_unlock flashcp free grep gunzip gzip halt hdparm head hexdump ifconfig insmod ionice iostat kill killall klogd less ln logger logread ls lsmod lsof lspci lsusb md5sum mkdir mkfifo mknod modinfo modprobe mount mpstat mv nanddump nandwrite nc netstat nice nslookup passwd poweroff ps pstree pwd renice rm rmdir rmmod route sed seq sleep sort strings stty swapoff swapon sync sysctl syslogd tail tar tftp time top touch tr true udhcpc udhcpd umount uniq uptime vconfig vi watch wc wget which xargs zcat


в bash я несилён от слова никак.

кому из гуру не лень помочь скрипт переделать чтоб избавившись от pgrep тот же результат достичь?
  • Вопрос задан
  • 837 просмотров
Подписаться 3 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Специалист по информационной безопасности + нейросети
    12 месяцев
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
  • Skillbox
    Профессия DevOps-инженер
    7 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
@maksam07
в bash я несилён от слова никак

я тоже

is_running() {
  PID_RUNNING=$(ps -o pid,args | grep "$NFQWS_BIN" | grep -v grep | awk '{print $1}' | head -n1)

  [ -z "$PID_RUNNING" ] && return 1
  [ ! -f "$PIDFILE" ] && return 1

  PID_SAVED=$(cat "$PIDFILE" 2>/dev/null)
  [ "$PID_RUNNING" -ne "$PID_SAVED" ] && return 1
  
  kill -0 "$PID_SAVED" 2>/dev/null || return 1
  
  return 0
}
Ответ написан
3vi1_0n3
@3vi1_0n3
Во-первых, busybox это совсем не bash, поэтому там есть свои особенности. То, что у вас, выглядит как какой-то роутер, поэтому может быть очень специфичной кастомной сборкой, busybox позволяет делать кастомизированные сборки.
Я бы сделал так (хотя это тоже может не сработать, у эмбеддед очень много особенностей):
is_running() {
  # Поскольку это выглядит как embedded, будем брать PID прямо из /proc
  PID_RUNNING=$(ls -l /proc/*/exe 2>/dev/null | grep "$NFQWS_BIN" | sed -re 's|^(.*/proc/)([0-9]+)(/exe.+)|\2|')
  [ -z "$PID_RUNNING" ] && return 1
  [ ! -f "$PIDFILE" ] && return 1
  PID_SAVED=$(cat "$PIDFILE" 2>/dev/null)
  [ "$PID_RUNNING" -ne "$PID_SAVED" ] && return 1
  kill -0 "$PID_SAVED" 2>/dev/null
  return $?
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы