Temat: Sprawdzanie czy proces istnieje

Witam ponownie.

W zależności od tego czy na OpenWRT uruchomiony jest proces scanimage potrzebuję wykonać funkcję warunkową.

I teraz tak, mamy dwie sytuacje:

Scanimage jest uruchomiony:

# ps | grep scanimage
21569 root     37544 S    scanimage -x 215 -y 297 --resolution 300dpi --format jpeg
21571 root     37420 R    scanimage -x 215 -y 297 --resolution 300dpi --format jpeg

Scanimage nie jest uruchomiony:

# ps | grep scanimage
21555 root      1312 R    grep scanimage

Potrzebuję to ubrać w warunek jak tutaj:

#!/bin/bash
ps cax | grep httpd > /dev/null
if [ $? -eq 0 ]; then
  echo "Process is running."
else
  echo "Process is not running."
fi

Tyle, że na OpenWRT to działać nie chce,

po pierwsze z powodu braku możliwości użycia deklaracji: #!/bin/bash

po drugie (bez tej dyrektywy):

# /scripts/check_scanimage_process.sh
ps: unrecognized option: c
BusyBox v1.35.0 (2022-10-14 22:44:41 UTC) multi-call binary.

Usage: ps

Show list of processes

        w       Wide output
Process is not running.

Jak w środowisku OpenWRT mogę jednoznacznie stwierdzić, czy proces scanimage jest uruchomiony, by w łatwy sposób wykonać od tego warunek ?

2

Odp: Sprawdzanie czy proces istnieje

W openwrt stosuje się domyślny shell: #!/bin/sh, bash jest dostępny po instalacji z pakietów ale jest to bez sensu bo jest zbędny i zajmuje miejsce. A samo polecenie

ps | grep scanimage | grep -v grep

co wydaje się dziwne, ale że ps pochodzi z busyboxa i w openwrt nie ma włączonych kilka opcji to w/w się sprawdza.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3 (edytowany przez mesmariusz 2023-09-02 20:08:30)

Odp: Sprawdzanie czy proces istnieje

Działa. Ale jak zapakuję do skryptu:

ps | grep scanimage | grep -v grep
if [ $? -eq 0 ]; then
  echo "Process is running."
else
  echo "Process is not running."
fi

to i tak, skrypt zobaczy sam siebie, i warunek stwierdzi, że scanimage działa (i musze jakoś wybrnąć ;-)

# /scripts/check_scanimage_process.sh
21797 root      1312 S    ash /scripts/check_scanimage_process.sh
Process is running.

---- edit ---

Dobra, zmieniłem nazwę skryptu ;-p

4

Odp: Sprawdzanie czy proces istnieje

lub

T=$(ps | grep scanimage | grep -v grep)
if [ -n "$T' ]; then
...

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.