Linux
服务器上我们通常需要在开机后自动
启动相关的程序。
本文主要整理和记录下工作中用到的关于这方面的知识,方便后续查找。
启动脚本的样例代码如下所示:
# 配置环境,请设置 Java 环境,即使你在系统中已经设置成功
JAVA_HOME=/usr/java/jdk1.8.0_171
JRE_HOME=/usr/java/jdk1.8.0_171/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
# 启动 jar 包。
nohup java -jar /java-service/xxx.jar > /java-service/logs/xxx.log &
echo $! > /var/run/xxx.pid
上述脚本中有几个需要注意的细节:
jar
包的指令为为nohup
指令,该命令后续讲解。进程 id
输出到 /var/run/
目录中,文件xxx.pid
中xxx
表示服务名称。在上述脚本中有一句非常关键的:
nohup java -jar /java-service/xxx.jar > /java-service/logs/xxx.log &
其中 nohup
常常搭配&
一起使用:
nohup command > xxx.log &
nohup
表示的关闭 shell
后进程仍然保持执行。&
表示的是后台运行,当使用 Ctrl+C
也不会退出。nohup
加上&
就达到了既不受shell
关闭影响,也做到了不受Ctrl+C
退出的影响。xxx.log
表示之前在控制台输出的文件输出到 xxx.log
中PID=${cat /var/run/xxx.pid}
kill -15 $PID
进程 id
输出到了/var/run/xxx.id
中,所以可以通过cat
命令获取。kill
指令对服务进行关闭。[Unit]
Description=service for description
[Service]
Type=forking
ExecStart=/java-service/xxx-start.sh
ExecStop=/java-service/xxx-stop.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
关于这个文件的详细参考说明可以查看此文档:https://www.csdn.net/article/2015-02-27/2824034
# 临时启动服务指令
system start xxx
# 允许开机启动
systemctl enable xxx
# 关闭开机启动
systemctl stop xxx
编写启动脚本:xxx-start.sh
这一步同方法一,没有改变。
对脚本添加可执行权限
chmod +x /java-service/xxx-start.sh
rc.local
标记为可执行文件。chmod +x /etc/rc.d/rc.local
/etc/rc.d/rc.local
文件末尾追加如下脚本/java-service/xxx-start.sh
上面提出了2个办法,一个办法是通过服务启动,另外一个办法是通过启动脚本启动。