CentOS7 设置自启动
在CentOS 6中,可以通过在/etc/init.d/
添加自启动脚本来设置自启动;
在CentOS 7中,设置自启动的方法发生了改变:虽然我们仍然可以使用脚本来添加自启动,但是官方更建议使用服务来设置自启动;
通过配置系统服务来设置自启动
以Docker为例:
安装完二进制的Docker之后,把Docker服务设置成自启动:
进入/etc/systemd/system/目录,并创建docker.service文件
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
# ExecStart=/usr/bin/dockerd --selinux-enabled=false --insecure-registry=ip
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
其中:
- After:代表要在其他的某些程序完成之后再执行;
- Type:代表服务执行顺序和方式;
Type=simple
(默认值):systemd认为该服务将立即启动,服务进程不会fork,如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket激活型;Type=forking
:systemd认为当该服务进程fork,且父进程退出后服务启动成功;对于常规的守护进程(daemon);使用此启动类型应同时指定PIDFile
,以便systemd能够跟踪服务的主进程;Type=oneshot
:这一选项适用于只执行一项任务、随后立即退出的服务;可能需要同时设置RemainAfterExit=yes
使得 systemd 在服务进程退出之后仍然认为服务处于激活状态;Type=notify
: 与Type=simple
相同,但约定服务会在就绪后向 systemd 发送一个信号;这一通知实现由libsystemd-daemon.so
提供;Type=dbus
:若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪;Type=idle
: 服务会延迟启动,一直到其他服务都启动完成之后才会启动此服务;
- WantedBy代表启动目标;
- target是一个类似而又不同于启动级别
(runlevel)
的概念
给docker.service文件添加执行权限
chmod +x /etc/systemd/system/docker.service
重新加载配置文件:systemctl daemon-reload
通过自启动脚本来设置
echo "source /etc/profile && cd /usr/local/src/emqx/bin && sudo ./emqx start" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
在CentOS 7中
/etc/rc.d/rc.local
文件的权限被降低了,开机的时候执行的脚本是不能启动一些服务的,执行下面的命令将文件标记为可执行的文件:
虽然两种方法都可以设置自启动,但是不建议通过脚本来设置,建议通过设置服务来启动;