Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Skrypt bash pokazujący uruchomione procesy dłużej niż 1h
#1
0
Witam jestem nowym członkiem forum. Ma palący problem muszę napisać taki skrypt w bash.
Skrypt ma wyświetlać wszystkie procesy OS (poza tymi uruchomionymi na użytkowniku root), które są uruchomione dłużej niż 1h.
Skrypt powinien wyświetlić na ekran taki komunikat np.:

Proces - "użytkownik, na którym proces został uruchomiony" "pid procesu" "komenda procesu" - wykonuje sie 1h:7m:39s

Jeśli znajdzie więcej niż jeden, komunikaty mają się wyświetlić, jeden pod drugim:


Proces - "użytkownik, na którym proces 1 został uruchomiony" "pid procesu 1" "komenda procesu 1" - wykonuje sie 1h:7m:39s
Kod:
#!/bin/bash

echo Proces "$USR" "$PID" "$KOM" wykonuje się: $CZAS


for i in `ps -fe | awk '($1 !="root") {print $1 $2 $3 $4 $5 $6 $7}'`;
  do
    echo $i;
  done


Proszę o szybką odpowiedź.

Pozdrawiam
Odpowiedz
#2
0
No i teraz wykonaj ten skrypt i zaprezentuj jakie daje wyniki bo ja już na pierwszy rzut oka widzę, że komenda echo znajduje się w nieodpowiednim miejscu, bo przed pętlą, która szuka odpowiednich danych..
Dodatkowo nie widzę definicji zmiennych $USR $PID $KOM $CZAS.
Odpowiedz
#3
0
(09-09-2022, 08:07)dedito napisał(a): No i teraz wykonaj ten skrypt i zaprezentuj jakie daje wyniki bo ja już na pierwszy rzut oka widzę, że komenda echo znajduje się w nieodpowiednim miejscu, bo przed pętlą, która szuka odpowiednich danych..
Dodatkowo nie widzę definicji zmiennych $USR $PID $KOM $CZAS.
To jest wynik, ale jeszcze nie wypisuje się jak powinno i nie mam separatorów między USER PID itd Sad

Kod:
Proces    wykonuje się:
USERPPIDCOMMANDELAPSED
Proces    wykonuje się:
polkitd1/usr/lib/polkit-1/polkitd-27-21:29:05
Proces    wykonuje się:
libstor+1/usr/bin/lsmd-d27-21:29:05
Proces    wykonuje się:
dbus1/usr/bin/dbus-daemon--syst27-21:29:05
Proces    wykonuje się:
chrony1/usr/sbin/chronyd27-21:29:05
Proces    wykonuje się:
clamscan1/usr/sbin/clamd-c/etc/cla27-21:29:02
Proces    wykonuje się:
mysql1/usr/libexec/mysqld--based27-21:29:01
Proces    wykonuje się:
clamupd+1/usr/bin/freshclam-d--for27-21:28:02
Proces    wykonuje się:
apache40988php-fpm:poolwww23-20:18:44
Proces    wykonuje się:
apache40988php-fpm:poolwww23-20:18:44
Proces    wykonuje się:
apache40988php-fpm:poolwww23-20:18:44
Proces    wykonuje się:
apache40988php-fpm:poolwww23-20:18:44
Proces    wykonuje się:
apache40988php-fpm:poolwww23-20:18:44
Proces    wykonuje się:
nrpe1/usr/sbin/nrpe-c/etc/nagi20-21:19:22
Proces    wykonuje się:
exim1/usr/sbin/exim-bd-q1h8-03:42:58
Proces    wykonuje się:
apache450953/usr/sbin/httpd-DFOREGROUN5-08:41:09
Proces    wykonuje się:
apache450953/usr/sbin/httpd-DFOREGROUN5-08:41:09
Proces    wykonuje się:
apache450953/usr/sbin/httpd-DFOREGROUN5-08:41:09
Proces    wykonuje się:
apache450953/usr/sbin/httpd-DFOREGROUN5-08:41:09
Proces    wykonuje się:
apache450953/usr/sbin/httpd-DFOREGROUN5-08:41:09
Proces    wykonuje się:
opph748141012php-fpm:poolopt_ext_ph7485-08:41:09
Proces    wykonuje się:
opph748141012php-fpm:poolopt_ext_ph7485-08:41:09
Proces    wykonuje się:
opph748141012php-fpm:poolopt_ext_ph7485-08:41:09
Proces    wykonuje się:
opph748141012php-fpm:poolopt_ext_ph7485-08:41:09
Proces    wykonuje się:
opph748141012php-fpm:poolopt_ext_ph7485-08:41:09
Proces    wykonuje się:
opph748141012php-fpm:poolopt_ext_ph7485-08:41:09
Proces    wykonuje się:
apache450953/usr/sbin/httpd-DFOREGROUN4-03:58:56
Proces    wykonuje się:
apache510631/usr/sbin/httpd-DFOREGROU1-22:01:48
Proces    wykonuje się:
apache510631/usr/sbin/httpd-DFOREGROU1-22:01:48
Proces    wykonuje się:
apache510631/usr/sbin/httpd-DFOREGROU1-22:01:48
Proces    wykonuje się:
apache510631/usr/sbin/httpd-DFOREGROU1-22:01:48
Proces    wykonuje się:
apache547135/usr/sbin/httpd-DFOREGROU02:59:48
Proces    wykonuje się:
apache547135/usr/sbin/httpd-DFOREGROU02:59:48
Proces    wykonuje się:
apache547135/usr/sbin/httpd-DFOREGROU02:59:48
Proces    wykonuje się:
apache547135/usr/sbin/httpd-DFOREGROU02:59:48
Proces    wykonuje się:

kod:

#!/bin/bash

#echo Proces "$USR" "$PID" "$KOM" wykonuje się: $CZAS

USER=$1
PID=$2
KOM=$3
CZAS=$5

IFS=$'\n'
for i in `ps -eo "%U %P %a %t " | awk '($1 !="root") {print $1 $2 $3 $4 $5 $6}'`;
  do
      echo $i
      echo Proces "$USR" "$PID" "$KOM" wykonuje się: $CZAS
done
Odpowiedz
#4
0
To w ogóle nie działa tak jak powinno z powodów, które już podałem.
Ja bym zaczął od testów tej pętli w terminalu, bez pisania skryptu.
Jak wyjdzie właściwy wynik do dalszej obróbki, to można zacząć się bawić skryptem.
Odpowiedz
#5
0
(09-09-2022, 12:10)dedito napisał(a): To w ogóle nie działa tak jak powinno z powodów, które już podałem.
Ja bym zaczął od testów tej pętli w terminalu, bez pisania skryptu.
Jak wyjdzie właściwy wynik do dalszej obróbki, to można zacząć się bawić skryptem.
A może jakaś podpowiedź bo mi się pomysły się kończą?
Odpowiedz
#6
0
Przykład:
Kod:
ps -fe
UID        PID  PPID  C STIME TTY          TIME CMD
webmast+    1    0  0 06:19 ?        00:00:00 /dev/init -- node /var/www/html/
...
Czyli interesują nas kolumny danych nr 1, 2, 7
No to dalej, korzystając z Twojego przykładu:
Kod:
ps -fe | awk '($1 !="root") {print $1 $2 $7}'
UIDPIDTIME
webmast+100:00:00p
Widać, że dane wyszły ale bez separatorów.
No to trzeba w tego pogooglać za przykładami i przykładowo zmodyfikować to tak:
Kod:
ps -fe | awk '($1 !="root") {print $1 " " $2 " " $7}'
UID PID TIME
webmast+ 1 00:00:00webmast+ 8 00:18:02
...
idąc tym tokiem można to jeszcze zmodyfikować tak:
Kod:
ps -fe | awk '($1 !="root") {print "Proc. " $1 " " $2 " wyk. "  $7}'
Proc. UID PID wyk. TIME
Proc. webmast+ 1 wyk. 00:00:00
...
czyli jak widać można odrazu uzyskać porządzane wyniki bez definiowania zmiennych.
Odpowiedz
#7
0
(09-09-2022, 12:44)dedito napisał(a): Przykład:
Kod:
ps -fe
UID        PID  PPID  C STIME TTY          TIME CMD
webmast+    1    0  0 06:19 ?        00:00:00 /dev/init -- node /var/www/html/
...
Czyli interesują nas kolumny danych nr 1, 2, 7
No to dalej, korzystając z Twojego przykładu:
Kod:
ps -fe | awk '($1 !="root") {print $1 $2 $7}'
UIDPIDTIME
webmast+100:00:00p
Widać, że dane wyszły ale bez separatorów.
No to trzeba w tego pogooglać za przykładami i przykładowo zmodyfikować to tak:
Kod:
ps -fe | awk '($1 !="root") {print $1 " " $2 " " $7}'
UID PID TIME
webmast+ 1 00:00:00webmast+ 8 00:18:02
...
idąc tym tokiem można to jeszcze zmodyfikować tak:
Kod:
ps -fe | awk '($1 !="root") {print "Proc. " $1 " " $2 " wyk. "  $7}'
Proc. UID PID wyk. TIME
Proc. webmast+ 1 wyk. 00:00:00
...
czyli jak widać można odrazu uzyskać porządzane wyniki bez definiowania zmiennych.


Teraz mam coś takiego kod:

Kod:
#!/bin/bash

#echo Proces "$USR" "$PID" "$KOM" wykonuje się: $CZAS


IFS=$'\n'
for i in `ps -eo "%U %P %a %t " | awk '($1 !="root") {print $1 " " $2 " " $3 " " $6 " " $7}'`;

  do
      echo $i
#      echo Proces "$USR" "$PID" "$KOM" wykonuje się: $CZAS

USER=$1
PID=$2
KOM=$3
CZAS=$5
echo $USER
echo $PID
done


wynik:

Kod:
USER PPID COMMAND


polkitd 1 /usr/lib/polkit-1/polkitd


libstor+ 1 /usr/bin/lsmd


dbus 1 /usr/bin/dbus-daemon


chrony 1 /usr/sbin/chronyd


clamscan 1 /usr/sbin/clamd 27-22:48:09


mysql 1 /usr/libexec/mysqld


clamupd+ 1 /usr/bin/freshclam 27-22:47:09


apache 40988 php-fpm: 23-21:37:51


apache 40988 php-fpm: 23-21:37:51


apache 40988 php-fpm: 23-21:37:51


apache 40988 php-fpm: 23-21:37:51


apache 40988 php-fpm: 23-21:37:51


nrpe 1 /usr/sbin/nrpe 20-22:38:29


exim 1 /usr/sbin/exim 8-05:02:05


apache 450953 /usr/sbin/httpd


apache 450953 /usr/sbin/httpd


apache 450953 /usr/sbin/httpd


apache 450953 /usr/sbin/httpd


apache 450953 /usr/sbin/httpd


opph7481 41012 php-fpm: 5-10:00:16


opph7481 41012 php-fpm: 5-10:00:16


opph7481 41012 php-fpm: 5-10:00:16


opph7481 41012 php-fpm: 5-10:00:16


opph7481 41012 php-fpm: 5-10:00:16


opph7481 41012 php-fpm: 5-10:00:16


apache 450953 /usr/sbin/httpd


apache 510631 /usr/sbin/httpd 1-23:20:55


apache 510631 /usr/sbin/httpd 1-23:20:55


apache 510631 /usr/sbin/httpd 1-23:20:55


apache 510631 /usr/sbin/httpd 1-23:20:55


apache 547135 /usr/sbin/httpd 04:18:55


apache 547135 /usr/sbin/httpd 04:18:55


apache 547135 /usr/sbin/httpd 04:18:55


apache 547135 /usr/sbin/httpd 04:18:55


Testowo dałem te zmienne czy w ogóle coś jest w nich jak widać nie ma nic.. Nie wiem w jaki sposób te kolumny przekierować do zmiennych , a później na echo..
Odpowiedz
#8
0
Stosuj znaczniki kodu, zgodnie z zasadami forum.

Nie ma potrzeby przekierowywać do zmiennych i do echa bo podałem przykład, który tego nie wymaga.
Odpowiedz
#9
0
(09-09-2022, 13:22)[email protected] napisał(a):
(09-09-2022, 12:44)dedito napisał(a): Przykład:
Kod:
ps -fe
UID        PID  PPID  C STIME TTY          TIME CMD
webmast+    1    0  0 06:19 ?        00:00:00 /dev/init -- node /var/www/html/
...
Czyli interesują nas kolumny danych nr 1, 2, 7
No to dalej, korzystając z Twojego przykładu:
Kod:
ps -fe | awk '($1 !="root") {print $1 $2 $7}'
UIDPIDTIME
webmast+100:00:00p
Widać, że dane wyszły ale bez separatorów.
No to trzeba w tego pogooglać za przykładami i przykładowo zmodyfikować to tak:
Kod:
ps -fe | awk '($1 !="root") {print $1 " " $2 " " $7}'
UID PID TIME
webmast+ 1 00:00:00webmast+ 8 00:18:02
...
idąc tym tokiem można to jeszcze zmodyfikować tak:
Kod:
ps -fe | awk '($1 !="root") {print "Proc. " $1 " " $2 " wyk. "  $7}'
Proc. UID PID wyk. TIME
Proc. webmast+ 1 wyk. 00:00:00
...
czyli jak widać można odrazu uzyskać porządzane wyniki bez definiowania zmiennych.


Teraz mam coś takiego kod:

Kod:
#!/bin/bash

#echo Proces "$USR" "$PID" "$KOM" wykonuje się: $CZAS


IFS=$'\n'
for i in `ps -eo "%U %P %a %t " | awk '($1 !="root") {print $1 " " $2 " " $3 " " $6 " " $7}'`;

  do
      echo $i
#      echo Proces "$USR" "$PID" "$KOM" wykonuje się: $CZAS

USER=$1
PID=$2
KOM=$3
CZAS=$5
echo $USER
echo $PID
done


wynik:

Kod:
USER PPID COMMAND


polkitd 1 /usr/lib/polkit-1/polkitd


libstor+ 1 /usr/bin/lsmd


dbus 1 /usr/bin/dbus-daemon


chrony 1 /usr/sbin/chronyd


clamscan 1 /usr/sbin/clamd 27-22:48:09


mysql 1 /usr/libexec/mysqld


clamupd+ 1 /usr/bin/freshclam 27-22:47:09


apache 40988 php-fpm: 23-21:37:51


apache 40988 php-fpm: 23-21:37:51


apache 40988 php-fpm: 23-21:37:51


apache 40988 php-fpm: 23-21:37:51


apache 40988 php-fpm: 23-21:37:51


nrpe 1 /usr/sbin/nrpe 20-22:38:29


exim 1 /usr/sbin/exim 8-05:02:05


apache 450953 /usr/sbin/httpd


apache 450953 /usr/sbin/httpd


apache 450953 /usr/sbin/httpd


apache 450953 /usr/sbin/httpd


apache 450953 /usr/sbin/httpd


opph7481 41012 php-fpm: 5-10:00:16


opph7481 41012 php-fpm: 5-10:00:16


opph7481 41012 php-fpm: 5-10:00:16


opph7481 41012 php-fpm: 5-10:00:16


opph7481 41012 php-fpm: 5-10:00:16


opph7481 41012 php-fpm: 5-10:00:16


apache 450953 /usr/sbin/httpd


apache 510631 /usr/sbin/httpd 1-23:20:55


apache 510631 /usr/sbin/httpd 1-23:20:55


apache 510631 /usr/sbin/httpd 1-23:20:55


apache 510631 /usr/sbin/httpd 1-23:20:55


apache 547135 /usr/sbin/httpd 04:18:55


apache 547135 /usr/sbin/httpd 04:18:55


apache 547135 /usr/sbin/httpd 04:18:55


apache 547135 /usr/sbin/httpd 04:18:55


Testowo dałem te zmienne czy w ogóle coś jest w nich jak widać nie ma nic.. Nie wiem w jaki sposób te kolumny przekierować do zmiennych , a później na echo..



OK..Co do znaczników (zapomniałem).. A i wczytałem się w tą ostatnią wiadomość już modyfikuję.

Dodano po pewnym czasie:
Teraz mam taki wynik:
Proces USER PPID COMMAND Wykonuje się:
Proces    wykonuje się:
Proces polkitd 1 /usr/lib/polkit-1/polkitd Wykonuje się:
Proces    wykonuje się:
Proces libstor+ 1 /usr/bin/lsmd Wykonuje się:
Proces    wykonuje się:
Proces dbus 1 /usr/bin/dbus-daemon Wykonuje się:
Proces    wykonuje się:
Proces chrony 1 /usr/sbin/chronyd Wykonuje się:
Proces    wykonuje się:
Proces clamscan 1 /usr/sbin/clamd Wykonuje się: 27-23:03:47
Proces    wykonuje się:
Proces mysql 1 /usr/libexec/mysqld Wykonuje się:
Proces    wykonuje się:
Proces clamupd+ 1 /usr/bin/freshclam Wykonuje się: 27-23:02:47
Proces    wykonuje się:
Proces apache 40988 php-fpm: Wykonuje się: 23-21:53:29
Proces    wykonuje się:
Proces apache 40988 php-fpm: Wykonuje się: 23-21:53:29
Proces    wykonuje się:
Proces apache 40988 php-fpm: Wykonuje się: 23-21:53:29
Proces    wykonuje się:
Proces apache 40988 php-fpm: Wykonuje się: 23-21:53:29


Teraz najgorsze jak przefiltrować po kolumnie czas i wyświetlać tylko starsze niż 1h? --sort w poleceniu ps?
Odpowiedz
#10
0
Najlepiej od razu sortować za pomocą ps i opcji --sort
https://man7.org/linux/man-pages/man1/ps.1.html
Odpowiedz


Skocz do:




Użytkownicy przeglądający ten wątek: 17 gości