shell脚本在Linux上关闭时自动启动服务
我为这种用法总共添加了六个shell脚本,您可以选择哪个脚本适合您。
我在每个shell脚本中应用了不同的命令和方法。
Note: 您需要更改电子邮件ID,而不是我们的ID。
1)在Linux系统中使用SysVinit停机时如何自动启动服务?
如果要在SysVinit Linux系统中启动单个服务,请使用以下bash脚本。
我已httpd在此脚本中添加了服务,但是您可以添加服务,无论您要监视哪个。
# vi /opt/scripts/service-monitor.sh
#!/bin/bash
serv=httpd
sstat=stopped
service $serv status | grep -i 'running|stopped' | awk '{print $3}' | while read output;
do
echo $output
if [ "$output" == "$sstat" ]; then
service $serv start
echo "$serv service is UP now.!" | mail -s "$serv service is DOWN and restarted now On $(hostname)" daygeek@gmail.com
else
echo "$serv service is running"
fi
done
设置文件的可执行权限service-monitor.sh。
$ chmod +x /opt/scripts/service-monitor.sh
最后添加一个cronjob以使其自动化。它将每5分钟运行一次。
# crontab -e
*/5 * * * * /bin/bash /opt/scripts/service-monitor.sh
或者,您可以使用以下脚本。
# vi /opt/scripts/service-monitor-1.sh
#!/bin/bash
serv=httpd
sstat=$(pidof $serv | wc -l )
if [ $sstat -gt 0 ]
then
echo "$serv is running fine!!!"
else
echo "$serv is down/dead"
service $serv start
echo "$serv service is UP now!!!" | mail -s "$serv service is DOWN and restarted now On $(hostname)" daygeek@gmail.com
fi
设置文件的可执行权限service-monitor-1.sh。
$ chmod +x /opt/scripts/service-monitor-1.sh
最后,我们添加了一个cron作业以使其自动化。它将每5分钟运行一次。
# crontab -e
*/5 * * * * /bin/bash /opt/scripts/service-monitor-1.sh
2)在Linux系统中使用systemd停机时如何自动启动服务?
如果要在systemd Linux系统中启动一项服务,请使用以下bash脚本。
我已httpd在此脚本中添加了服务,但是您可以添加服务,无论您要监视哪个。
# vi /opt/scripts/service-monitor-2.sh
#!/bin/bash
serv=httpd
sstat=dead
systemctl status $serv | grep -i 'running|dead' | awk '{print $3}' | sed 's/[()]//g' | while read output;
do
echo $output
if [ "$output" == "$sstat" ]; then
systemctl start $serv
echo "$serv service is UP now.!" | mail -s "$serv service is DOWN and restarted now On $(hostname)" daygeek@gmail.com
else
echo "$serv service is running"
fi
done
设置文件的可执行权限service-monitor-2.sh。
$ chmod +x /opt/scripts/service-monitor-2.sh
最后添加一个cronjob以使其自动化。它将每5分钟运行一次。
# crontab -e
*/5 * * * * /bin/bash /opt/scripts/service-monitor-2.sh
或者,您可以使用以下脚本。
# vi /opt/scripts/service-monitor-3.sh
#!/bin/bash
serv=httpd
sstat=$(pidof $serv | wc -l )
if [ $sstat -gt 0 ]
then
echo "$serv is running fine!!!"
else
echo "$serv is down/dead"
systemctl start $serv
echo "$serv service is UP now!!!" | mail -s "$serv service is DOWN and restarted now On $(hostname)" daygeek@gmail.com
fi
设置文件的可执行权限service-monitor-3.sh。
$ chmod +x /opt/scripts/service-monitor-3.sh
最后添加一个cronjob以使其自动化。它将每5分钟运行一次。
# crontab -e
*/5 * * * * /bin/bash /opt/scripts/service-monitor-3.sh
3)在Linux系统中使用SysVinit时如何自动启动多项服务?
如果要在SysVinit Linux系统中启动多个服务,请使用以下bash脚本。
我已在此脚本中添加httpd和rsyslog服务,但是您可以添加服务,无论您要监视哪个。
# vi /opt/scripts/service-monitor-4.sh
#!/bin/bash
sstat=stopped
for serv in httpd rsyslog
do
service $serv status | grep -i 'running|stopped' | awk '{print $3}' | while read output;
do
echo $output
if [ "$output" == "$sstat" ]; then
service $serv start
echo "$serv service is UP now.!" | mail -s "$serv service is DOWN and restarted now On $(hostname)" daygeek@gmail.com
else
echo "$serv service is running"
fi
done
done
设置文件的可执行权限service-monitor-4.sh。
$ chmod +x /opt/scripts/service-monitor-4.sh
最后添加一个cronjob以使其自动化。它将每5分钟运行一次。
# crontab -e
*/5 * * * * /bin/bash /opt/scripts/service-monitor-4.sh
或者,您可以使用以下脚本。
# vi /opt/scripts/service-monitor-5.sh
#!/bin/bash
for serv in rsyslog httpd
do
sstat=$(pgrep $serv | wc -l )
if [ $sstat -gt 0 ]
then
echo "$serv is running!!!"
else
echo "$serv is down/dead"
service $serv start
echo "$serv serv is UP now!!!" | mail -s "$serv service is DOWN and restarted now On $(hostname)" daygeek@gmail.com
fi
done
设置文件的可执行权限service-monitor-5.sh。
$ chmod +x /opt/scripts/service-monitor-5.sh
最后添加一个cronjob以使其自动化。它将每5分钟运行一次。
# crontab -e
*/5 * * * * /bin/bash /opt/scripts/service-monitor-5.sh
4)在Linux系统中使用systemd停机时如何自动启动多项服务?
如果要在systemd Linux系统中启动多个服务,请使用以下bash脚本。
我已在此脚本中添加httpd和rsyslog服务,但是您可以添加服务,无论您要监视哪个。
# vi /opt/scripts/service-monitor-6.sh
#!/bin/bash
sstat=dead
for serv in httpd rsyslog
do
systemctl status $serv | grep -i 'running|dead' | awk '{print $3}' | sed 's/[()]//g' | while read output;
do
echo $output
if [ "$output" == "$sstat" ]; then
systemctl start $serv
echo "$serv service is UP now.!" | mail -s "$serv service is DOWN and restarted now On $(hostname)" daygeek@gmail.com
else
echo "$serv service is running"
fi
done
done
设置文件的可执行权限service-monitor-6.sh。
$ chmod +x /opt/scripts/service-monitor-6.sh
最后添加了一个cron作业以使其自动化。它将每5分钟运行一次。
# crontab -e
*/5 * * * * /bin/bash /opt/scripts/service-monitor-6.sh
或者,您也可以使用以下脚本。
# vi /opt/scripts/service-monitor-7.sh
#!/bin/bash
for serv in rsyslog httpd
do
sstat=$(pgrep $serv | wc -l )
if [ $sstat -gt 0 ]
then
echo "$serv is running!!!"
else
echo "$serv is down/dead"
systemctl start $serv
echo "$serv serv is UP now!!!" | mail -s "$serv service is DOWN and restarted now On $(hostname)" daygeek@gmail.com
fi
done
设置文件的可执行权限service-monitor-7.sh。
$ chmod +x /opt/scripts/service-monitor-7.sh
最后添加一个cronjob以使其自动化。它将每5分钟运行一次。
# crontab -e
*/5 * * * * /bin/bash /opt/scripts/service-monitor-7.sh
5)如何使用systemd和SysVinit Linux系统在服务关闭时自动启动服务?
如果要在systemd和SysVinit Linux系统中启动服务,请使用以下bash脚本。
我已httpd在此脚本中添加了服务,但是您可以添加服务,无论您要监视哪个。
# vi /opt/scripts/service-monitor-8.sh
#!/bin/bash
smanager=$(ps -p1 | grep "init|systemd" | awk '{print $4}')
serv=httpd
if (( $(pidof $serv | wc -l) > 0 ))
then
echo "$serv is running!!!"
elif [ "$smanager" == "init" ]
then
service $serv start
echo "$serv service is UP now.!" | mail -s "$serv service is DOWN and restarted now On $(hostname)" daygeek@gmail.com
else
systemctl start $serv
echo "$serv service is UP now.!" | mail -s "$serv service is DOWN and restarted now On $(hostname)" daygeek@gmail.com
fi
设置文件的可执行权限service-monitor-8.sh。
$ chmod +x /opt/scripts/service-monitor-8.sh
最后添加一个cronjob以使其自动化。它将每5分钟运行一次。
# crontab -e
*/5 * * * * /bin/bash /opt/scripts/service-monitor-8.sh
6)在Linux系统中,如何使用systemd和SysVinit在服务关闭时自动启动服务?
如果要在systemd和SysVinit Linux系统中启动多个服务,请使用以下bash脚本。
我已在此脚本中添加httpd和rsyslog服务,但是您可以添加服务,无论您要监视哪个。
# vi /opt/scripts/service-monitor-9.sh
#!/bin/bash
smanager=$(ps -p1 | grep "init|systemd" | awk '{print $4}')
for serv in rsyslog httpd
do
if (( $(pgrep $serv | wc -l) > 0 ))
then
echo "$serv is running!!!"
elif [ "$smanager" == "init" ]
then
service $serv start
echo "$serv service is UP now.!" | mail -s "$serv service is DOWN and restarted now On $(hostname)" daygeek@gmail.com
else
systemctl start $serv
echo "$serv service is UP now.!" | mail -s "$serv service is DOWN and restarted now On $(hostname)" daygeek@gmail.com
fi
done
设置文件的可执行权限service-monitor-9.sh。
$ chmod +x /opt/scripts/service-monitor-9.sh
最后添加了一个cron作业以使其自动化。它将每5分钟运行一次。
# crontab -e
*/5 * * * * /bin/bash /opt/scripts/service-monitor-9.sh
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任