环境:
linux,x86
编写启动脚本startup.sh
实际开发中可能要启动的服务比较多,我们单独写一个脚本startup.sh
,后续改动只需要修改此脚本文件。
#! /bin/bash
# ------------------------ 基础服务 ------------------------
# nginx,因为我的nginx是用root用户安装的,安全起见就用root用户运行
echo "准备启动nginx..."
NGINX_PID=`ps -ef|grep nginx|grep master|grep -v grep|awk '{print $2}'`
if [ ! $NGINX_PID ];then
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
echo "nginx启动成功"
else
echo "nginx早已运行"
fi
# ------------------------ 业务服务 ------------------------
# 使用 su 命令切换到普通用户执行其他脚本
# 为了保证以下脚本都能执行,添加set +e/-e以忽略脚本报错
set +e
su - ec2-user -s /bin/bash /home/ec2-user/dbcleaner/start.sh
set -e
set +e
su - ec2-user -s /bin/bash /home/ec2-user/stcloud-admin/start.sh
set -e
# 也能写在一起
# set +e
# su - ec2-user -s /bin/bash /home/ec2-user/dbcleaner/start.sh
# su - ec2-user -s /bin/bash /home/ec2-user/stcloud-admin/start.sh
# set -e
使用命令chmod +x startup.sh
设置为可执行文件
新建systemd服务
在/etc/systemd/system/
目录下新建systemd服务文件,名称可任意,以my-startup.service
为例,内容如下:
[Unit]
Description=用户自定义的开机自启动服务
[Service]
# oneshot:执行一次就行
Type=ones-hot
# 可不写,默认就是root
User=root
# process:仅关闭主进程,不关闭生成的子进程
KillMode=process
Restart=no
PrivateTmp=true
# 配置service启动超时时间
TimeoutStartSec=10s
# 使用脚本启动 注意需要绝对路径
ExecStart=/home/ec2-user/startup.sh
[Install]
# 服务安装的用户模式 就是指想要使用这个服务的目录是多用户
WantedBy=multi-user.target
使用命令sudo chmod 755 my-startup.service
设置为可执行文件,再使用命令sudo systemctl daemon-reload
重载配置,再使用命令systemctl list-units --type=service
列出所有service,查看到my-startup.service
就可以进行下面的步骤。
启动服务并设置自启动
# 启动服务
sudo systemctl start my-startup.service
# 设置开机启动
sudo systemctl enable my-startup.service
查看该服务的状态:
systemctl status my-startup.service
或者使用命令systemctl is-enabled my-startup
查看服务是否开机启动:
[ec2-user@ip-172-26-7-0 ~]$ systemctl is-enabled my-startup
enabled
[ec2-user@ip-172-26-7-0 ~]$
补充:停止服务并从自启动项中删除
# 停止服务
sudo systemctl stop my-startup.service
# 取消开机自启动
sudo systemctl disable my-startup.service
备注
systemd服务文件详解可参考:linux systemd service 服务文件简介