Ich versuche, die Zeit für den Prozessstart zu bekommen. Normalerweise verwende ich die Klammern für den ersten Buchstaben des Prozesses, den ich verwende. Es nimmt die Selbstberichterstattung "Grep" in der PS-Ausgabe.Brackets [] um String mit grep und ps - ef
#!/bin/bash
set -x
restarTXG="sendevent -E FORCE_STARTJOB -J CASPERRT_CD_TXG_DR_STR_PS"
bounceTXG="sendevent -E FORCE_STARTJOB -J CASPERRT_CD_TXG_DR_STP_PS; sleep 10 ; sendevent -E FORCE_STARTJOB -J CASPERRT_CD_TXG_DR_STR_PS"
timeofTXG=$(ps -ef | grep [t]xg | awk '{print $5}')
if [ -n "$timeofTXG" ] ; then
printf "%s\n" "The TXG_DR is ON as of $timeofTXG"
else
printf "%s\n" "'The TXG_DR is OFF"
fi
18:40 ist die Zeit, die ich das Prüfskript ausführen. 17:44 Uhr ist der Zeitpunkt, zu dem der Prozess begann.
++ ps -ef
++ grep '[t]xg'
++ awk '{print $5}'
+ timeofTXG='17:44
18:40
18:40'
+ '[' -n '17:44
18:40
18:40' ']'
+ printf '%s\n' 'The TXG_DR is ON as of 17:44
18:40
18:40'
The TXG_DR is ON as of 17:44
18:40
18:40
Ich weiß nicht wirklich, wie die eckigen Klammern funktionieren. Wenn ich die ps von der Befehlszeile aus ausführen, funktionieren die Klammern [] - ps -ef | grep [t] xg | awk '{print $ 5}' aber im Zusammenhang mit dem Bash-Skript, sie arbeiten nicht, sie geben mir die Zeit des Selbstberichts grep. Wie funktionieren die Klammern? Warum funktionieren sie in der Befehlszeile und nicht im Skript? Wie entferne ich das selbst entlarvende Grep im Bash-Skript?
Sie Zitate müssen von '[t] xg' zu verhindern, ersetzt mit 'txg' durch die Shell, wenn sich im aktuellen Verzeichnis eine Datei mit diesem Namen befindet. Das heißt, der Code sollte "[t] xg" lauten. –
... oder, besser, grep 'ps' überhaupt nicht, aber verwenden Sie stattdessen ein Spezialwerkzeug wie' pgrep'. –
Oder, noch besser, schauen Sie nicht einmal auf die Prozesstabelle, sondern schreiben Sie Ihre Software, um Advisory Locking oder das vom Betriebssystem bereitgestellte Prozessüberwachungssystem zu verwenden (systemd, runit, daemontools, upstart, launchd, was auch immer es sein mag). –