在linux系统中,使用systemctl enable ***时,会设置开机自启动,其实就是在/etc/systemd/system/multi-user.target.wants/下创建执行/usr/lib/systemd/system/下的配置文件的软连接
而脚本在使用nohup时关闭系统终端也会运行,bash *.sh &在后台运行,但脚本在执行完毕之后就结束了,想将其开机设置为自启可使用下方法
1.准备一个shell脚本,如在阿里云镜像服务获得的加速器
vim docker-speed.sh
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://*****.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
2.创建unit文件
vim a.service
[Unit]
Description = unit file
[Service]
Type = oneshot
ExecStart = /bin/bash /root/shells/docker-speed.sh
[Install]
WantedBy = multi-user.target
3.将文件移动到/usr/lib/systemd/system
mv lih.service /usr/lib/systemd/system
4.设置开机自启
systemctl enable a.service
5.查询其服务状态
systemctl status a.service
6.查看系统自启动的文件
systemctl list-unit-files | grep enabled
unit文件的组成
第一部分:unit,用于记录该unit文件的一些通用信息
第二部分:service,记录service具体信息(如何启动、配置文件位置...)
第三部分:install,记录安装信息(运行级别)
第一部分:Unit部分
1)Description:对该服务的一个简要说明
2)Before:定义启动顺序,例子:Before=nginx.service,表示该服务需要在nginx启动之前启动
3)After:定义启动顺序,同上
4)Documentation:帮助文档
5)Wants:建议同时启动某服务,比如:Wants=nginx.service 表示系统中最好启动nginx服务,但是即使不启动nginx,当前这个服务也没啥影响
6)Require:当前服务是需要哪个特定的服务的,比如:Require=nginx.service,这就表示当前服务是需要nginx服务,那么在启动当前这个服务的时候,会自动将nginx也启动起来;而且一旦发现nginx服务停止了,那么当前这个服务也就会自动停止
【require无法指定启动次序,需要结合Before After来用,否则经常出现各种问题】
7)Conflicis:当一个服务启动的时候,会立刻停止与之相冲突的服务
第二部分:Service部分
1)Type:指定service的类型
类型1:oneshot:程序执行完成就自动结束了,没有后台进程,比如执行一个shell
类型2:forking:需要一个后台守护进程一直在运行,比如运行nginx、apache、sshd
2)ExecStart:指定如何启动服务(指定启动服务要执行的命令)
如果服务类型是oneshot类型,那么可以直接写上他要执行命令即可,通常不能添加参数和选项
如果服务类型不是oneshot类型,那么在写要执行的命令的时候,可以添加一些参数,比如指定选项、配置文件、用户
【如果要执行多个命令,那么多个命令之间用;分割,如果需要换行可以用 \ 来续行】
3)ExecStartPre, ExecStartPost:指定在执行启动服务之前、之后要执行什么命令
4)ExecStop:停止服务
5)Restart:
6)PIDFile:指定pid文件的路径
第三部分:install部分
WantedBy:指定运行级别,WantedBy=multi-user.target
grub配置文件 /etc/default/grub
RUB_TIMEOUT=5 #指定用户选择菜单超时时间
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" #指定菜单中的描述名称
GRUB_DEFAULT=saved #GRUB指定哪个是默认的title(save表示会保存当前的配置,需要结合一个内置变量来使用)
GRUB_DISABLE_SUBMENU=true #禁用子菜单
GRUB_TERMINAL_OUTPUT="console" #指定将启动过程中的信息输出到终端
GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet" #在启动系统的时候,以命令行的方式向内核传递参数
GRUB_DISABLE_RECOVERY="true" #指定是否显示启动过程信息