Bash script to verify if a process is running is not working
I have a simple script as below which checks if fail2ban service is running or not on Ubuntu 18.04:
#!/bin/bash
# Script to check if fail2ban service is running
if pgrep -x "fail2ban" > /dev/null
then
echo "Fail2ban is running"
else
echo "Fail2ban is not running"
fi
I have installed fail2ban in a test VM and is running on the VM. Here is a screenshot of systemctl status command.
But, when the run the above script, I get the result that "Fail2ban is not running". I am not sure if is with the script. I tried ps aux command too instead of pgrep. But, I still get the same result.
bash process administrator
New contributor
skr is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
|
show 1 more comment
I have a simple script as below which checks if fail2ban service is running or not on Ubuntu 18.04:
#!/bin/bash
# Script to check if fail2ban service is running
if pgrep -x "fail2ban" > /dev/null
then
echo "Fail2ban is running"
else
echo "Fail2ban is not running"
fi
I have installed fail2ban in a test VM and is running on the VM. Here is a screenshot of systemctl status command.
But, when the run the above script, I get the result that "Fail2ban is not running". I am not sure if is with the script. I tried ps aux command too instead of pgrep. But, I still get the same result.
bash process administrator
New contributor
skr is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
4
Why even try to cobble something together withps, when you can usesystemctl is-active fail2ban? FWIW your command probably fails because you specified an exact match (-x) but the process name is actuallyfail2ban.server
– steeldriver
Jan 18 at 15:55
Ok. Thanks. It worked, I changed the command to the above command. But, is there any way you know why pgrep will not work? Also, Is systemctl command available by default in all redhat systems?
– skr
Jan 18 at 15:58
Oh that is right. Thank you so much.
– skr
Jan 18 at 16:02
@steeldriver That's the service name, not the process name.
– Lightness Races in Orbit
Jan 18 at 18:16
@LightnessRacesinOrbit my mistake, the process isfail2ban-server(with a hyphen);pgrep -x fail2ban.serverfinds it because it's a regex match (.matches the-) and for examplesystemctl status fail2ban.servicesaysMain PID: 2721 (fail2ban-server). The service name is fail2ban.service I believe.
– steeldriver
Jan 18 at 19:37
|
show 1 more comment
I have a simple script as below which checks if fail2ban service is running or not on Ubuntu 18.04:
#!/bin/bash
# Script to check if fail2ban service is running
if pgrep -x "fail2ban" > /dev/null
then
echo "Fail2ban is running"
else
echo "Fail2ban is not running"
fi
I have installed fail2ban in a test VM and is running on the VM. Here is a screenshot of systemctl status command.
But, when the run the above script, I get the result that "Fail2ban is not running". I am not sure if is with the script. I tried ps aux command too instead of pgrep. But, I still get the same result.
bash process administrator
New contributor
skr is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
I have a simple script as below which checks if fail2ban service is running or not on Ubuntu 18.04:
#!/bin/bash
# Script to check if fail2ban service is running
if pgrep -x "fail2ban" > /dev/null
then
echo "Fail2ban is running"
else
echo "Fail2ban is not running"
fi
I have installed fail2ban in a test VM and is running on the VM. Here is a screenshot of systemctl status command.
But, when the run the above script, I get the result that "Fail2ban is not running". I am not sure if is with the script. I tried ps aux command too instead of pgrep. But, I still get the same result.
bash process administrator
bash process administrator
New contributor
skr is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
skr is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
edited Jan 18 at 19:57
Pablo Bianchi
2,4751532
2,4751532
New contributor
skr is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
asked Jan 18 at 15:49
skrskr
263
263
New contributor
skr is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
skr is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
skr is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
4
Why even try to cobble something together withps, when you can usesystemctl is-active fail2ban? FWIW your command probably fails because you specified an exact match (-x) but the process name is actuallyfail2ban.server
– steeldriver
Jan 18 at 15:55
Ok. Thanks. It worked, I changed the command to the above command. But, is there any way you know why pgrep will not work? Also, Is systemctl command available by default in all redhat systems?
– skr
Jan 18 at 15:58
Oh that is right. Thank you so much.
– skr
Jan 18 at 16:02
@steeldriver That's the service name, not the process name.
– Lightness Races in Orbit
Jan 18 at 18:16
@LightnessRacesinOrbit my mistake, the process isfail2ban-server(with a hyphen);pgrep -x fail2ban.serverfinds it because it's a regex match (.matches the-) and for examplesystemctl status fail2ban.servicesaysMain PID: 2721 (fail2ban-server). The service name is fail2ban.service I believe.
– steeldriver
Jan 18 at 19:37
|
show 1 more comment
4
Why even try to cobble something together withps, when you can usesystemctl is-active fail2ban? FWIW your command probably fails because you specified an exact match (-x) but the process name is actuallyfail2ban.server
– steeldriver
Jan 18 at 15:55
Ok. Thanks. It worked, I changed the command to the above command. But, is there any way you know why pgrep will not work? Also, Is systemctl command available by default in all redhat systems?
– skr
Jan 18 at 15:58
Oh that is right. Thank you so much.
– skr
Jan 18 at 16:02
@steeldriver That's the service name, not the process name.
– Lightness Races in Orbit
Jan 18 at 18:16
@LightnessRacesinOrbit my mistake, the process isfail2ban-server(with a hyphen);pgrep -x fail2ban.serverfinds it because it's a regex match (.matches the-) and for examplesystemctl status fail2ban.servicesaysMain PID: 2721 (fail2ban-server). The service name is fail2ban.service I believe.
– steeldriver
Jan 18 at 19:37
4
4
Why even try to cobble something together with
ps, when you can use systemctl is-active fail2ban? FWIW your command probably fails because you specified an exact match (-x) but the process name is actually fail2ban.server– steeldriver
Jan 18 at 15:55
Why even try to cobble something together with
ps, when you can use systemctl is-active fail2ban? FWIW your command probably fails because you specified an exact match (-x) but the process name is actually fail2ban.server– steeldriver
Jan 18 at 15:55
Ok. Thanks. It worked, I changed the command to the above command. But, is there any way you know why pgrep will not work? Also, Is systemctl command available by default in all redhat systems?
– skr
Jan 18 at 15:58
Ok. Thanks. It worked, I changed the command to the above command. But, is there any way you know why pgrep will not work? Also, Is systemctl command available by default in all redhat systems?
– skr
Jan 18 at 15:58
Oh that is right. Thank you so much.
– skr
Jan 18 at 16:02
Oh that is right. Thank you so much.
– skr
Jan 18 at 16:02
@steeldriver That's the service name, not the process name.
– Lightness Races in Orbit
Jan 18 at 18:16
@steeldriver That's the service name, not the process name.
– Lightness Races in Orbit
Jan 18 at 18:16
@LightnessRacesinOrbit my mistake, the process is
fail2ban-server (with a hyphen); pgrep -x fail2ban.server finds it because it's a regex match (. matches the -) and for example systemctl status fail2ban.service says Main PID: 2721 (fail2ban-server). The service name is fail2ban.service I believe.– steeldriver
Jan 18 at 19:37
@LightnessRacesinOrbit my mistake, the process is
fail2ban-server (with a hyphen); pgrep -x fail2ban.server finds it because it's a regex match (. matches the -) and for example systemctl status fail2ban.service says Main PID: 2721 (fail2ban-server). The service name is fail2ban.service I believe.– steeldriver
Jan 18 at 19:37
|
show 1 more comment
2 Answers
2
active
oldest
votes
You asked pgrep to exactly (-x) search for a process called fail2ban
but the output of systemctl status shows it is called
/usr/bin/python3 instead.
To check whether a systemd unit is running use
systemctl is-active --quiet fail2ban
That is:
if systemctl is-active --quiet fail2ban; then
echo "running"
else
echo "not running"
fi
2
Alternatively, one could usepgrep -f '*fail2ban*'to pattern-match orpgrep -f '/usr/bin/python3 /usr/bin/fail2ban-server'to match exactly what screenshots reveal
– Sergiy Kolodyazhnyy
Jan 18 at 20:08
2
pgrep -f '*fail2ban*'could catch thepgrepcommand itself.
– Dev
Jan 18 at 20:16
At least on my 16.04 system, in spite of it being a python script, the process name (as seen in/proc/<pid>/comm) isfail2ban-serversopgrep -x fail2ban-serverdoes work - although I see no reason to use it whensystemctl is-activeis available
– steeldriver
Jan 18 at 23:17
add a comment |
The following shellscript running combines the result of
systemctl is-activeandps -ef | ... | grep
in order to detect if a certain program (or a program name containing the search string) is running or not.
#!/bin/bash
if [ $# -ne 1 ]
then
echo "Usage: $0 <program-name>
$0 <part of program name>
Examples: $0 firefox
$0 term
$0 dbus
$0 'dbus-daemon --session'"
exit
fi
inversvid="033[7m"
resetvid="033[0m"
redback="033[1;37;41m"
greenback="033[1;37;42m"
blueback="033[1;37;44m"
runn=false
tmpfil=$(mktemp)
# check by systemctl
systemctl is-active --quiet "$1"
if [ $? -eq 0 ]
then
echo "systemctl is-active:"
runn=true
fi
# check by ps
ps -ef | tr -s ' ' ' ' | cut -d ' ' -f 8-9 | grep "$1" | grep -vE -e "$0 $1" -e "grep $1" | sort -u > "$tmpfil"
tmpstr=$(head -n1 $tmpfil)
#echo "$tmpstr"
if [ "$tmpstr" == "$1" ] || [ "${tmpstr##*/}" == "$1" ] || [ "${1##*/}" == "${0##*/}" ]
then
echo "ps -ef: active:"
runn=true
elif test -s "$tmpfil"
then
if $runn
then
echo "----- consider also ---------------------------------------------"
cat "$tmpfil"
echo "-----------------------------------------------------------------"
else
echo "----- try with: -------------------------------------------------"
cat "$tmpfil"
echo "-----------------------------------------------------------------"
fi
fi
if $runn
then
echo -e "$greenback $1 is running $resetvid"
else
inpath=$(which "$1")
if [ "$inpath" == "" ]
then
echo -e "$redback no path found to $1 $resetvid"
else
echo -e "$blueback $1 is not running $resetvid"
fi
fi
Make it executable and put it in a directory in PATH, if you wish. I put it into my bin directory and can used it without any path.
Usage:
$ running
Usage: /home/sudodus/bin/running <program-name>
/home/sudodus/bin/running <part of program name>
Examples: /home/sudodus/bin/running firefox
/home/sudodus/bin/running term
/home/sudodus/bin/running dbus
/home/sudodus/bin/running 'dbus-daemon --session'
Examples:
$ running firefox
ps -ef: active:
firefox is running # green background - running
$ running term
----- try with: -------------------------------------------------
/usr/lib/gnome-terminal/gnome-terminal-server
xterm
x-terminal-emulator
-----------------------------------------------------------------
no path found to term # red background - path not found
$ running dbus
systemctl is-active:
----- consider also ---------------------------------------------
/usr/bin/dbus-daemon --session
/usr/bin/dbus-daemon --syslog
/usr/bin/dbus-daemon --system
/usr/bin/fcitx-dbus-watcher unix:abstract=/tmp/dbus-Nm2MSvuTZF,guid=25bad8d51276d088045625055c425080
-----------------------------------------------------------------
dbus is running # green background
$ running 'dbus-daemon --session'
ps -ef: active:
dbus-daemon --session is running # green background
$ running libreoffice
libreoffice is not running # blue background - not running
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "89"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
skr is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1110915%2fbash-script-to-verify-if-a-process-is-running-is-not-working%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
You asked pgrep to exactly (-x) search for a process called fail2ban
but the output of systemctl status shows it is called
/usr/bin/python3 instead.
To check whether a systemd unit is running use
systemctl is-active --quiet fail2ban
That is:
if systemctl is-active --quiet fail2ban; then
echo "running"
else
echo "not running"
fi
2
Alternatively, one could usepgrep -f '*fail2ban*'to pattern-match orpgrep -f '/usr/bin/python3 /usr/bin/fail2ban-server'to match exactly what screenshots reveal
– Sergiy Kolodyazhnyy
Jan 18 at 20:08
2
pgrep -f '*fail2ban*'could catch thepgrepcommand itself.
– Dev
Jan 18 at 20:16
At least on my 16.04 system, in spite of it being a python script, the process name (as seen in/proc/<pid>/comm) isfail2ban-serversopgrep -x fail2ban-serverdoes work - although I see no reason to use it whensystemctl is-activeis available
– steeldriver
Jan 18 at 23:17
add a comment |
You asked pgrep to exactly (-x) search for a process called fail2ban
but the output of systemctl status shows it is called
/usr/bin/python3 instead.
To check whether a systemd unit is running use
systemctl is-active --quiet fail2ban
That is:
if systemctl is-active --quiet fail2ban; then
echo "running"
else
echo "not running"
fi
2
Alternatively, one could usepgrep -f '*fail2ban*'to pattern-match orpgrep -f '/usr/bin/python3 /usr/bin/fail2ban-server'to match exactly what screenshots reveal
– Sergiy Kolodyazhnyy
Jan 18 at 20:08
2
pgrep -f '*fail2ban*'could catch thepgrepcommand itself.
– Dev
Jan 18 at 20:16
At least on my 16.04 system, in spite of it being a python script, the process name (as seen in/proc/<pid>/comm) isfail2ban-serversopgrep -x fail2ban-serverdoes work - although I see no reason to use it whensystemctl is-activeis available
– steeldriver
Jan 18 at 23:17
add a comment |
You asked pgrep to exactly (-x) search for a process called fail2ban
but the output of systemctl status shows it is called
/usr/bin/python3 instead.
To check whether a systemd unit is running use
systemctl is-active --quiet fail2ban
That is:
if systemctl is-active --quiet fail2ban; then
echo "running"
else
echo "not running"
fi
You asked pgrep to exactly (-x) search for a process called fail2ban
but the output of systemctl status shows it is called
/usr/bin/python3 instead.
To check whether a systemd unit is running use
systemctl is-active --quiet fail2ban
That is:
if systemctl is-active --quiet fail2ban; then
echo "running"
else
echo "not running"
fi
answered Jan 18 at 16:02
PerlDuckPerlDuck
5,86211333
5,86211333
2
Alternatively, one could usepgrep -f '*fail2ban*'to pattern-match orpgrep -f '/usr/bin/python3 /usr/bin/fail2ban-server'to match exactly what screenshots reveal
– Sergiy Kolodyazhnyy
Jan 18 at 20:08
2
pgrep -f '*fail2ban*'could catch thepgrepcommand itself.
– Dev
Jan 18 at 20:16
At least on my 16.04 system, in spite of it being a python script, the process name (as seen in/proc/<pid>/comm) isfail2ban-serversopgrep -x fail2ban-serverdoes work - although I see no reason to use it whensystemctl is-activeis available
– steeldriver
Jan 18 at 23:17
add a comment |
2
Alternatively, one could usepgrep -f '*fail2ban*'to pattern-match orpgrep -f '/usr/bin/python3 /usr/bin/fail2ban-server'to match exactly what screenshots reveal
– Sergiy Kolodyazhnyy
Jan 18 at 20:08
2
pgrep -f '*fail2ban*'could catch thepgrepcommand itself.
– Dev
Jan 18 at 20:16
At least on my 16.04 system, in spite of it being a python script, the process name (as seen in/proc/<pid>/comm) isfail2ban-serversopgrep -x fail2ban-serverdoes work - although I see no reason to use it whensystemctl is-activeis available
– steeldriver
Jan 18 at 23:17
2
2
Alternatively, one could use
pgrep -f '*fail2ban*' to pattern-match or pgrep -f '/usr/bin/python3 /usr/bin/fail2ban-server' to match exactly what screenshots reveal– Sergiy Kolodyazhnyy
Jan 18 at 20:08
Alternatively, one could use
pgrep -f '*fail2ban*' to pattern-match or pgrep -f '/usr/bin/python3 /usr/bin/fail2ban-server' to match exactly what screenshots reveal– Sergiy Kolodyazhnyy
Jan 18 at 20:08
2
2
pgrep -f '*fail2ban*' could catch the pgrep command itself.– Dev
Jan 18 at 20:16
pgrep -f '*fail2ban*' could catch the pgrep command itself.– Dev
Jan 18 at 20:16
At least on my 16.04 system, in spite of it being a python script, the process name (as seen in
/proc/<pid>/comm) is fail2ban-server so pgrep -x fail2ban-server does work - although I see no reason to use it when systemctl is-active is available– steeldriver
Jan 18 at 23:17
At least on my 16.04 system, in spite of it being a python script, the process name (as seen in
/proc/<pid>/comm) is fail2ban-server so pgrep -x fail2ban-server does work - although I see no reason to use it when systemctl is-active is available– steeldriver
Jan 18 at 23:17
add a comment |
The following shellscript running combines the result of
systemctl is-activeandps -ef | ... | grep
in order to detect if a certain program (or a program name containing the search string) is running or not.
#!/bin/bash
if [ $# -ne 1 ]
then
echo "Usage: $0 <program-name>
$0 <part of program name>
Examples: $0 firefox
$0 term
$0 dbus
$0 'dbus-daemon --session'"
exit
fi
inversvid="033[7m"
resetvid="033[0m"
redback="033[1;37;41m"
greenback="033[1;37;42m"
blueback="033[1;37;44m"
runn=false
tmpfil=$(mktemp)
# check by systemctl
systemctl is-active --quiet "$1"
if [ $? -eq 0 ]
then
echo "systemctl is-active:"
runn=true
fi
# check by ps
ps -ef | tr -s ' ' ' ' | cut -d ' ' -f 8-9 | grep "$1" | grep -vE -e "$0 $1" -e "grep $1" | sort -u > "$tmpfil"
tmpstr=$(head -n1 $tmpfil)
#echo "$tmpstr"
if [ "$tmpstr" == "$1" ] || [ "${tmpstr##*/}" == "$1" ] || [ "${1##*/}" == "${0##*/}" ]
then
echo "ps -ef: active:"
runn=true
elif test -s "$tmpfil"
then
if $runn
then
echo "----- consider also ---------------------------------------------"
cat "$tmpfil"
echo "-----------------------------------------------------------------"
else
echo "----- try with: -------------------------------------------------"
cat "$tmpfil"
echo "-----------------------------------------------------------------"
fi
fi
if $runn
then
echo -e "$greenback $1 is running $resetvid"
else
inpath=$(which "$1")
if [ "$inpath" == "" ]
then
echo -e "$redback no path found to $1 $resetvid"
else
echo -e "$blueback $1 is not running $resetvid"
fi
fi
Make it executable and put it in a directory in PATH, if you wish. I put it into my bin directory and can used it without any path.
Usage:
$ running
Usage: /home/sudodus/bin/running <program-name>
/home/sudodus/bin/running <part of program name>
Examples: /home/sudodus/bin/running firefox
/home/sudodus/bin/running term
/home/sudodus/bin/running dbus
/home/sudodus/bin/running 'dbus-daemon --session'
Examples:
$ running firefox
ps -ef: active:
firefox is running # green background - running
$ running term
----- try with: -------------------------------------------------
/usr/lib/gnome-terminal/gnome-terminal-server
xterm
x-terminal-emulator
-----------------------------------------------------------------
no path found to term # red background - path not found
$ running dbus
systemctl is-active:
----- consider also ---------------------------------------------
/usr/bin/dbus-daemon --session
/usr/bin/dbus-daemon --syslog
/usr/bin/dbus-daemon --system
/usr/bin/fcitx-dbus-watcher unix:abstract=/tmp/dbus-Nm2MSvuTZF,guid=25bad8d51276d088045625055c425080
-----------------------------------------------------------------
dbus is running # green background
$ running 'dbus-daemon --session'
ps -ef: active:
dbus-daemon --session is running # green background
$ running libreoffice
libreoffice is not running # blue background - not running
add a comment |
The following shellscript running combines the result of
systemctl is-activeandps -ef | ... | grep
in order to detect if a certain program (or a program name containing the search string) is running or not.
#!/bin/bash
if [ $# -ne 1 ]
then
echo "Usage: $0 <program-name>
$0 <part of program name>
Examples: $0 firefox
$0 term
$0 dbus
$0 'dbus-daemon --session'"
exit
fi
inversvid="033[7m"
resetvid="033[0m"
redback="033[1;37;41m"
greenback="033[1;37;42m"
blueback="033[1;37;44m"
runn=false
tmpfil=$(mktemp)
# check by systemctl
systemctl is-active --quiet "$1"
if [ $? -eq 0 ]
then
echo "systemctl is-active:"
runn=true
fi
# check by ps
ps -ef | tr -s ' ' ' ' | cut -d ' ' -f 8-9 | grep "$1" | grep -vE -e "$0 $1" -e "grep $1" | sort -u > "$tmpfil"
tmpstr=$(head -n1 $tmpfil)
#echo "$tmpstr"
if [ "$tmpstr" == "$1" ] || [ "${tmpstr##*/}" == "$1" ] || [ "${1##*/}" == "${0##*/}" ]
then
echo "ps -ef: active:"
runn=true
elif test -s "$tmpfil"
then
if $runn
then
echo "----- consider also ---------------------------------------------"
cat "$tmpfil"
echo "-----------------------------------------------------------------"
else
echo "----- try with: -------------------------------------------------"
cat "$tmpfil"
echo "-----------------------------------------------------------------"
fi
fi
if $runn
then
echo -e "$greenback $1 is running $resetvid"
else
inpath=$(which "$1")
if [ "$inpath" == "" ]
then
echo -e "$redback no path found to $1 $resetvid"
else
echo -e "$blueback $1 is not running $resetvid"
fi
fi
Make it executable and put it in a directory in PATH, if you wish. I put it into my bin directory and can used it without any path.
Usage:
$ running
Usage: /home/sudodus/bin/running <program-name>
/home/sudodus/bin/running <part of program name>
Examples: /home/sudodus/bin/running firefox
/home/sudodus/bin/running term
/home/sudodus/bin/running dbus
/home/sudodus/bin/running 'dbus-daemon --session'
Examples:
$ running firefox
ps -ef: active:
firefox is running # green background - running
$ running term
----- try with: -------------------------------------------------
/usr/lib/gnome-terminal/gnome-terminal-server
xterm
x-terminal-emulator
-----------------------------------------------------------------
no path found to term # red background - path not found
$ running dbus
systemctl is-active:
----- consider also ---------------------------------------------
/usr/bin/dbus-daemon --session
/usr/bin/dbus-daemon --syslog
/usr/bin/dbus-daemon --system
/usr/bin/fcitx-dbus-watcher unix:abstract=/tmp/dbus-Nm2MSvuTZF,guid=25bad8d51276d088045625055c425080
-----------------------------------------------------------------
dbus is running # green background
$ running 'dbus-daemon --session'
ps -ef: active:
dbus-daemon --session is running # green background
$ running libreoffice
libreoffice is not running # blue background - not running
add a comment |
The following shellscript running combines the result of
systemctl is-activeandps -ef | ... | grep
in order to detect if a certain program (or a program name containing the search string) is running or not.
#!/bin/bash
if [ $# -ne 1 ]
then
echo "Usage: $0 <program-name>
$0 <part of program name>
Examples: $0 firefox
$0 term
$0 dbus
$0 'dbus-daemon --session'"
exit
fi
inversvid="033[7m"
resetvid="033[0m"
redback="033[1;37;41m"
greenback="033[1;37;42m"
blueback="033[1;37;44m"
runn=false
tmpfil=$(mktemp)
# check by systemctl
systemctl is-active --quiet "$1"
if [ $? -eq 0 ]
then
echo "systemctl is-active:"
runn=true
fi
# check by ps
ps -ef | tr -s ' ' ' ' | cut -d ' ' -f 8-9 | grep "$1" | grep -vE -e "$0 $1" -e "grep $1" | sort -u > "$tmpfil"
tmpstr=$(head -n1 $tmpfil)
#echo "$tmpstr"
if [ "$tmpstr" == "$1" ] || [ "${tmpstr##*/}" == "$1" ] || [ "${1##*/}" == "${0##*/}" ]
then
echo "ps -ef: active:"
runn=true
elif test -s "$tmpfil"
then
if $runn
then
echo "----- consider also ---------------------------------------------"
cat "$tmpfil"
echo "-----------------------------------------------------------------"
else
echo "----- try with: -------------------------------------------------"
cat "$tmpfil"
echo "-----------------------------------------------------------------"
fi
fi
if $runn
then
echo -e "$greenback $1 is running $resetvid"
else
inpath=$(which "$1")
if [ "$inpath" == "" ]
then
echo -e "$redback no path found to $1 $resetvid"
else
echo -e "$blueback $1 is not running $resetvid"
fi
fi
Make it executable and put it in a directory in PATH, if you wish. I put it into my bin directory and can used it without any path.
Usage:
$ running
Usage: /home/sudodus/bin/running <program-name>
/home/sudodus/bin/running <part of program name>
Examples: /home/sudodus/bin/running firefox
/home/sudodus/bin/running term
/home/sudodus/bin/running dbus
/home/sudodus/bin/running 'dbus-daemon --session'
Examples:
$ running firefox
ps -ef: active:
firefox is running # green background - running
$ running term
----- try with: -------------------------------------------------
/usr/lib/gnome-terminal/gnome-terminal-server
xterm
x-terminal-emulator
-----------------------------------------------------------------
no path found to term # red background - path not found
$ running dbus
systemctl is-active:
----- consider also ---------------------------------------------
/usr/bin/dbus-daemon --session
/usr/bin/dbus-daemon --syslog
/usr/bin/dbus-daemon --system
/usr/bin/fcitx-dbus-watcher unix:abstract=/tmp/dbus-Nm2MSvuTZF,guid=25bad8d51276d088045625055c425080
-----------------------------------------------------------------
dbus is running # green background
$ running 'dbus-daemon --session'
ps -ef: active:
dbus-daemon --session is running # green background
$ running libreoffice
libreoffice is not running # blue background - not running
The following shellscript running combines the result of
systemctl is-activeandps -ef | ... | grep
in order to detect if a certain program (or a program name containing the search string) is running or not.
#!/bin/bash
if [ $# -ne 1 ]
then
echo "Usage: $0 <program-name>
$0 <part of program name>
Examples: $0 firefox
$0 term
$0 dbus
$0 'dbus-daemon --session'"
exit
fi
inversvid="033[7m"
resetvid="033[0m"
redback="033[1;37;41m"
greenback="033[1;37;42m"
blueback="033[1;37;44m"
runn=false
tmpfil=$(mktemp)
# check by systemctl
systemctl is-active --quiet "$1"
if [ $? -eq 0 ]
then
echo "systemctl is-active:"
runn=true
fi
# check by ps
ps -ef | tr -s ' ' ' ' | cut -d ' ' -f 8-9 | grep "$1" | grep -vE -e "$0 $1" -e "grep $1" | sort -u > "$tmpfil"
tmpstr=$(head -n1 $tmpfil)
#echo "$tmpstr"
if [ "$tmpstr" == "$1" ] || [ "${tmpstr##*/}" == "$1" ] || [ "${1##*/}" == "${0##*/}" ]
then
echo "ps -ef: active:"
runn=true
elif test -s "$tmpfil"
then
if $runn
then
echo "----- consider also ---------------------------------------------"
cat "$tmpfil"
echo "-----------------------------------------------------------------"
else
echo "----- try with: -------------------------------------------------"
cat "$tmpfil"
echo "-----------------------------------------------------------------"
fi
fi
if $runn
then
echo -e "$greenback $1 is running $resetvid"
else
inpath=$(which "$1")
if [ "$inpath" == "" ]
then
echo -e "$redback no path found to $1 $resetvid"
else
echo -e "$blueback $1 is not running $resetvid"
fi
fi
Make it executable and put it in a directory in PATH, if you wish. I put it into my bin directory and can used it without any path.
Usage:
$ running
Usage: /home/sudodus/bin/running <program-name>
/home/sudodus/bin/running <part of program name>
Examples: /home/sudodus/bin/running firefox
/home/sudodus/bin/running term
/home/sudodus/bin/running dbus
/home/sudodus/bin/running 'dbus-daemon --session'
Examples:
$ running firefox
ps -ef: active:
firefox is running # green background - running
$ running term
----- try with: -------------------------------------------------
/usr/lib/gnome-terminal/gnome-terminal-server
xterm
x-terminal-emulator
-----------------------------------------------------------------
no path found to term # red background - path not found
$ running dbus
systemctl is-active:
----- consider also ---------------------------------------------
/usr/bin/dbus-daemon --session
/usr/bin/dbus-daemon --syslog
/usr/bin/dbus-daemon --system
/usr/bin/fcitx-dbus-watcher unix:abstract=/tmp/dbus-Nm2MSvuTZF,guid=25bad8d51276d088045625055c425080
-----------------------------------------------------------------
dbus is running # green background
$ running 'dbus-daemon --session'
ps -ef: active:
dbus-daemon --session is running # green background
$ running libreoffice
libreoffice is not running # blue background - not running
answered Jan 19 at 12:41
sudodussudodus
23.6k32874
23.6k32874
add a comment |
add a comment |
skr is a new contributor. Be nice, and check out our Code of Conduct.
skr is a new contributor. Be nice, and check out our Code of Conduct.
skr is a new contributor. Be nice, and check out our Code of Conduct.
skr is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Ask Ubuntu!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1110915%2fbash-script-to-verify-if-a-process-is-running-is-not-working%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
4
Why even try to cobble something together with
ps, when you can usesystemctl is-active fail2ban? FWIW your command probably fails because you specified an exact match (-x) but the process name is actuallyfail2ban.server– steeldriver
Jan 18 at 15:55
Ok. Thanks. It worked, I changed the command to the above command. But, is there any way you know why pgrep will not work? Also, Is systemctl command available by default in all redhat systems?
– skr
Jan 18 at 15:58
Oh that is right. Thank you so much.
– skr
Jan 18 at 16:02
@steeldriver That's the service name, not the process name.
– Lightness Races in Orbit
Jan 18 at 18:16
@LightnessRacesinOrbit my mistake, the process is
fail2ban-server(with a hyphen);pgrep -x fail2ban.serverfinds it because it's a regex match (.matches the-) and for examplesystemctl status fail2ban.servicesaysMain PID: 2721 (fail2ban-server). The service name is fail2ban.service I believe.– steeldriver
Jan 18 at 19:37