1 在 Linux 下开机自动重启脚本(亲测)

1、简介

经常碰到机器断电之后需要重启一大堆服务,为了防止这种事情发生,设置开机自启的脚本十分的重要,我们习惯性的做法就是编写一个重启脚本,然后在 /etc/rc.local 中去完成开机执行。例如下面这样:

# chmod +x /etc/rc.local
# vi /etc/rc.local
/usr/local/nginx/sbin/nginx
service start tomcat
/usr/local/apache/bin/apachectl start
service mysql star
/home/www/guonei_netprotect.sh

在这里插入图片描述
测试结果,服务都启动了
在这里插入图片描述
停止服务,然后查看端口,重启系统,查看服务是否自启动,发现服务已经自启
在这里插入图片描述
在这里插入图片描述

2、通过 Crontab 实现

Crontab 可以使用 @reboot 来执行主机启动之后的命令。首先在命令行输入:

$ crontab -e

然后添加以下内容:

@reboot /root/script/restart.sh

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
完成后,这个脚本就可以在重启的时候自动执行了。

注意 :服务器宕机之后,人工要确定脚本和服务是否启动正常;或者刚部署服务和脚本时,重启服务器测试。

其它的一些进阶玩法:

在启动完成后的指定时间内运行脚本
# 在启动 5 分钟后运行指定脚本
@reboot sleep 300 && /home/wwwjobs/clean-static-cache.sh

3、通过 Systemd 实现

首先编写一个名为 restart 的 Systemd 服务:

$ vim /lib/systemd/system/restart.service

[Unit]
Description=restart
After=default.target

[Service]
ExecStart=/root/script/restart.sh

[Install]
WantedBy=default.target

在这里插入图片描述
在这里插入图片描述
然后启用这个 Systemd 服务:

$ systemctl daemon-reload
$ systemctl enable restart.service

在这里插入图片描述
完成后,这个服务对应的脚本就可以自动开机自启了。
nginx开机自启
通用方式启动nginx

/usr/local/nginx/sbin/nginx  #启动
/usr/local/nginx/sbin/nginx  -s reload  #重启
/usr/local/nginx/sbin/nginx -s   quit   #关闭nginx

systemd 管理控制启动模式

vim      /usr/lib/systemd/system/nginx.service

[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target

参数详解

systemctl restart nginx
systemctl enable  nginx
systemctl stop  nginx

在这里插入图片描述
二进制安装tomcat 实现systemd管理控制

wget  120.78.77.38/file/jdk-8u231-linux-x64.rpm
wget  120.78.77.38/file/apache-tomcat-9.0.27.tar.gz

rpm -ivh  jdk-8u231-linux-x64.rpm    #rpm直接安装jdk

配置环境变量

vim    /etc/profile

export JAVA_HOME=/usr/java/jdk1.8.0_231-amd64
export JRE_HOME=${JAVA_HOME}/jre  
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export  PATH=${JAVA_HOME}/bin:$PATH 
source   /etc/profile
java -version   #检测环境

在这里插入图片描述
安装tomcat

tar  -xf  apache-tomcat-9.0.27  
mv  apache-tomcat-9.0.27  /usr/local/tomcat
启动tomcat
sh    /usr/local/tomcat/bin/startup.sh   #启动
sh   /usr/local/tomcat/bin/shutdown.sh #关闭

systemd管理控制启动

vim      /usr/lib/systemd/system/tomcat.service

[Unit]
Description=tomcat server
Wants=network-online.target
After=network.target

[Service]
Type=forking
Environment="JAVA_HOME=/usr/java/jdk1.8.0_231-amd64"
Environment="PATH=$JAVA_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
Environment="CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target
systemctl restart tomcat  #启动
systemctl enable tomcat   #配置自启
systemctl stop  tomcat   #停止服务
systemctl status  tomcat  #检测状态

以上两个实战nginx和tomcat程序中自带了启动停止脚本,如果启动得程序没有自带脚本则需要自己编写一个类似得启动停止脚本

部署jar程序 实现systemd管理控制
实际得项目中会有一些jar程序需要启动 如果手动启动则需要输入一大串命令 停止则需要杀掉进程来停止,很麻烦

举一个实际启动得例子切换到jar目录下

java -jar decode.jar -Dconfig=/usr/local/abc/application.properties

编写一个启动脚本

vim  demo.sh

#!/bin/bash
#

source /etc/profile
jarName="abc-web.jar"
workDir="/usr/local/abc"

start(){
    cd ${workDir} && java -jar ${jarName} --spring.profiles.active=prod --server.port=9630 >uams.log 2>&1 &
}

stop(){
    ps -ef | grep -qP "(?<=-jar)\s+${jarName}" && kill $(ps -ef | grep -P "(?<=-jar)\s+${jarName}" | awk '{print $2}')
}

case $1 in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
esac

编写 systemd 配置文件

vim  /usr/lib/systemd/system/abc.service

[Unit]
Description=uams server
Wants=network-online.target
After=network.target

[Service]
Type=forking
WorkingDirectory=/usr/local/abc/
ExecStart=/bin/bash uams.sh start
ExecStop=/bin/bash uams.sh stop
ExecReload=/bin/bash uams.sh restart
Restart=on-failure

[Install]
WantedBy=multi-user.target

启动abc服务

systemctl restart abc  #启动
systemctl enable abc   #配置自启
systemctl stop  abc   #停止服务
systemctl status  abc  #检测状态



4参考文档
https://www.google.com
https://tinyurl.com/6ryafefw
https://www.cyberciti.biz/faq/linux-execute-cron-job-after-system-reboot/

https://mp.weixin.qq.com/s/nWb7LtxEhUMWwd2y7tmU8Q

最简明的 Systemd 进程管理教程
https://mp.weixin.qq.com/s/-slVuB9V5q-pmAwevn0aWA
来源:https://blog.csdn.net/weixin_43546282/article/details/113761180

来源url
栏目