shell脚本添加到systemd中,设置为开机自启

在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"		#指定是否显示启动过程信息

你可能感兴趣的:(shell脚本,linux)