I want to grep a specific status of a service (tomcat8.service
).
Only if the string was found, I want to execute some logic.
Problem: even if I execute the script on service name that does not exist ("asd" in this example), the if $status
still matches and prints out. But why?
status = $(systemctl status asd.service | grep 'active')
echo $status
if $status
then
echo "$SERVICE was active"
exit 0
fi
exit 0
Result output is: asd.service was active
, which is certainly not true.
The echo $status
prints: status: Unknown job: =
Best Answer
You can make use of grep's return status.
or even easier:
or if you prefer
if
:Anyways, take care about the keywords
inactive
,not active
,active (exited)
or alike. This will also match yourgrep
statement. See the comments. Thanks @ Terrance for the hint.Update:
No need for grep.
systemctl
has the commandis-active
included.or: