Administrator
Administrator
Published on 2024-11-21 / 22 Visits
0
0

Linux程序开机自启动方法

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
  1. [Unit]:区块包含了控制参数

  • Description:当前服务的简单描述信息。

  • After=network.target:表示redis.servicenetwork.target之后再启动。(network.target表示系统中网络功能初始化已经完成)。

  1. [Service]:区块定义了如何启动当前服务

  • Type=forking:服务采用fork()方式启动,此时父进程将会退出,子进程将成为主进程。适合daemon类进程。

  • ExecStart:定义启动进程时执行的命令。

  • Restart=always:服务无论是正常或非正常退出的情况,systemd总是保持重启的行为。

  • PrivateTmp=true:使用私有的tmp目录,设置后在tmp目录下会创建对应服务的临时目录,服务停止后会删除。

  1. [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


Comment