1、systemd
systemd是大多数现代Linux发行版(如Ubuntu、Debian、Fedora、CentOS、Arch Linux)的默认初始化系统,更加现代化和易于管理。是最推荐的一个方法。
对于那些支持systemd的应用,安装的时候,会自动在/usr/lib/systemd/system
目录中添加一个以.service
后缀结尾的配置文件,这种情况常见于使用apt、yum软件仓库安装,或者通过软件官方提供的deb、rpm包安装的应用。
如果是通过源码或或二进制方式安装的应用,需要用户自行在/usr/lib/systemd/system
目录中添加一个以.service
后缀结尾的配置文件,配置文件内容需要遵循一定的格式和定义。
如果想要实现应用服务开机自动启动,需要执行systemctl enable server_name
,此时Linux会在/etc/systemd/system/(target组别)
目录下新增一个链接符号文件,目标路径指向/usr/lib/systemd/systemd
中的service文件。
Linux系统启动时,内核创建第一个进程systemd,systemd就会根据target组别
启动系统服务。
1.1 systemd配置文件
这是一个redis服务配置文件,比较简单,可配置项还有很多,不一一介绍。
[Unit]
Description=redis-server
After=network.target
[Service]
Type=forking
ExecStart=/root/redis-6.2.6/src/redis-server /root/redis-6.2.6/redis.conf
Restart=always
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[Unit]:区块包含了控制参数
Description:当前服务的简单描述信息。
After=network.target:表示
redis.service
在network.target
之后再启动。(network.target
表示系统中网络功能初始化已经完成)。
[Service]:区块定义了如何启动当前服务
Type=forking:服务采用
fork()
方式启动,此时父进程将会退出,子进程将成为主进程。适合daemon类进程。ExecStart:定义启动进程时执行的命令。
Restart=always:服务无论是正常或非正常退出的情况,systemd总是保持重启的行为。
PrivateTmp=true:使用私有的tmp目录,设置后在tmp目录下会创建对应服务的临时目录,服务停止后会删除。
[Install]:区块定义如何安装这个配置文件,即怎样做到开机启动
WantedBy=multi-user.target:表示该服务所在的
target
组别,multi-user.target
对应传统的多用户运行级别(init3),是标准的非图形用户界面多用户系统目标。
1.2 启动日志
systemd内置了日志管理功能,可以快速定位启动失败的原因。
[root@localhost ~]# systemctl status redis
--会列出简单的日志
[root@localhost ~]# journalctl -u redis
--会列出详细日志
2、rc.local
/etc/rc.local
文件是Linux系统中的一个启动脚本,常被用于在系统启动时执行用户自定义的命令或脚本。
[root@localhost ~]# cat /etc/rc.local
#!/bin/bash
/root/redis-6.2.6/src/redis-server /root/redis-6.2.6/redis.conf
[root@localhost ~]# chmod 744 /etc/rc.d/rc.local
--/etc/rc.local是/etc/rc.d/rc.local的软链接,源文件需要给予执行权限
3、crontab
crontab
是Linux/UNIX系统中的一个任务调度工具,用于安排周期性任务的执行,使用@reboot
参数可以配置开机时执行命令或脚本。
[root@localhost ~]# crontab -l
@reboot /root/redis-6.2.6/src/redis-server /root/redis-6.2.6/redis.conf