'How to only show output from shell script that is running as a service?
I write a shell script and installed it on systemctl to run on startup, everything works fine, however if i run "systemctl status myservice" it shows all my script source code instead only the outputs of my script my script looks similar to this (as a example):
while true
do
echo "pinging..."
ping -c 10 google.com
.... blah blah ....
.... blah blah ....
done
if i do systemctl status myservice it show my code instead "pinging..." and the ping output, how can i do that systemctl only shows the output instead the code?
Here is my systemctl status and systemctl cat outputs:
$systemctl status checkupserver:
● checkupserver.service - Check Servers Online Service
Loaded: loaded (/etc/systemd/system/checkupserver.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2022-05-09 20:54:21 UTC;
Main PID: 471544 (bash)
Tasks: 2 (limit: 9054)
Memory: 1.2M
CGroup: /system.slice/checkupserver.service
├─ 571033 /bin/checkservers.sh >
echo "Starting Service..."
while true
do
echo "pinging server..."
ping -c 10 serverip
... blah blah ...
done
/bin/checkservers.sh
└─4785411 /bin/checkservers.sh >
echo "Starting Service..."
while true
do
echo "pinging server..."
ping -c 10 serverip
... blah blah ...
done
/bin/checkservers.sh
$systemctl cat checkupserver:
# /etc/systemd/system/checkupserver.service
[Unit]
Description=Check Servers Online Service
[Service]
User=checker
ExecStart=/bin/checkservers.sh
Restart=always
RestartSec=10
TimeoutStopSec=90
KillMode=process
SyslogIdentifier=CheckServers
[Install]
WantedBy=multi-user.target
Solution 1:[1]
You're just receiving the printout of the script because you haven't told it how it can be run from your shell.
So you have two options here.
- Change your script so it has the appropriate shebang at the start
#!/bin/bash
while true
do
echo "pinging..."
ping -c 10 google.com
.... blah blah ....
.... blah blah ....
done
or 2. Tell your service file how to execute the script
# /etc/systemd/system/checkupserver.service
[Unit]
Description=Check Servers Online Service
[Service]
User=checker
ExecStart=/bin/bash -c /bin/checkservers.sh
Restart=always
RestartSec=10
TimeoutStopSec=90
KillMode=process
SyslogIdentifier=CheckServers
[Install]
WantedBy=multi-user.target
Either of the two options will give you the below output:
root@var-som-mx6:/tmp# systemctl status checkupserver.service
? checkupserver.service - Check Servers Online Service
Loaded: loaded (/tmp/checkupserver.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 1970-01-05 20:11:38 UTC; 4s ago
Main PID: 3645 (bash)
CGroup: /system.slice/checkupserver.service
??3645 /bin/bash -c /tmp/checkservers.sh
??3646 ping -c 10 10.7.0.50
Jan 05 20:11:38 var-som-mx6 systemd[1]: Started Check Servers Online Service.
Jan 05 20:11:39 var-som-mx6 CheckServers[3645]: pinging...
Jan 05 20:11:39 var-som-mx6 CheckServers[3645]: PING 10.7.0.50 (10.7.0.50): 56 data bytes
Jan 05 20:11:39 var-som-mx6 CheckServers[3645]: 64 bytes from 10.7.0.50: seq=0 ttl=64 time=0.406 ms
Jan 05 20:11:40 var-som-mx6 CheckServers[3645]: 64 bytes from 10.7.0.50: seq=1 ttl=64 time=0.463 ms
Jan 05 20:11:41 var-som-mx6 CheckServers[3645]: 64 bytes from 10.7.0.50: seq=2 ttl=64 time=0.369 ms
Jan 05 20:11:42 var-som-mx6 CheckServers[3645]: 64 bytes from 10.7.0.50: seq=3 ttl=64 time=0.399 ms
Jan 05 20:11:43 var-som-mx6 CheckServers[3645]: 64 bytes from 10.7.0.50: seq=4 ttl=64 time=0.453 ms
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Brendan |