开机自启rc.local
1 rc-local.service
ls /lib/systemd/system | grep rc
sudo vim /lib/systemd/system/rc-local.service
打开之后:
一般正常的启动文件主要分成三部分
- [Unit] 段: 启动顺序与依赖关系
- [Service] 段: 启动行为, 如何启动,启动类型
- [Install] 段: 定义如何安装这个配置文件,即怎样做到开机启动
/etc/rc.local 在网络启动之后启动,加上 [Install] 段:
[Install]
WantedBy=multi-user.target
Alias=rc-local.service
[Service]
2 新建并修改 rc.local 文件
sudo vim /etc/rc.local
脚本内容为:
#!/bin/sh
echo "自启动成功" > /usr/local/test.log
supervisord -c /etc/supervisor/supervisord.conf #supervisord开机启动
/etc/init.d/mysqld start # mysql开机启动
exit 0
PS:#!/bin/sh 这一行一定要加上!
PS: 如果在 /etc/rc.local 中添加的是 ./test.sh 这种类型的,要在末尾加上 &,不然重启 ubuntu 的时候会卡在启动界面进不去系统。加上 & 是让脚本启动后在后台运行的作用
PS: 你的命令,不要有死循环或无法退出的程序,不然进不了系统
如果脚本内的cmd需要sudo权限执行,则命令格式为
echo 'passward' |sudo -S cmd
3 执行权限rc.local
sudo chmod +x /etc/rc.local
4 建立软连接
ln -s /lib/systemd/system/rc-local.service /etc/systemd/system/
设置权限
sudo chown root:root /etc/systemd/system/rc-local.service
sudo chmod 644 /etc/systemd/system/rc-local.service
systemd 默认从目录 /etc/systemd/system 读取配置文件。但是,里面存放的大部分文件都是符号链接,真正的配置文件存放 /lib/systemd/system
注意:systemd要求软链接必须与目标名称相同。如果不同,执行systemctl enable xxx时将报Failed to enable unit: File xxx.service: Link has been severed错误
服务配置文件将保持在原始位置,而软链接将位于/etc/systemd/system目录下,使systemd能够找到并管理该服务。这样做的好处是,当需要修改或更新服务配置文件时,只需在原始位置进行操作,而不需要修改软链接。
注意:如果用软链接配置,disable服务时,会将/etc/systemd/system下的.service软链接删除;但是如果是普通文件方式,disable服务时,不会将/etc/systemd/system下的.service文件删除
5 开启服务
启动服务查看启动状态
sudo systemctl start rc-local.service
(sudo systemctl daemon-reload)
sudo systemctl status rc-local.service
使能开机自启动:
sudo systemctl enable rc-local.service
解释 rc-local.service
[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target
[Service]
Type=forking #子进程方式启动, 后台运行的形式
ExecStart=/etc/rc.local start #服务具体运行命令
#ExecReload #服务重启命令
#ExecStop #服务停止命令
#Restart=always
#RestartSec=3
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no
[install]
WantedBy=multi-user.target
Alias=rc-local.service #服务别名
[Unit]
· - `Description`:用于设置服务的描述信息。
- - `Requires`:用于指定服务所依赖的其他服务。
- - `After`:用于指定服务启动的顺序,可以设置在哪些服务之后启动。
- - `Before`:用于指定服务启动的顺序,可以设置在哪些服务之前启动。
[Service]
· - `Type`:定义服务单元的启动类型和运行状态
1.simple:默认,这是最简单的服务类型。意思就是说启动的程序就是主体程序,这个程序要是退出那么一切皆休。
2. forking::标准 Unix Daemon 使用的启动方式。启动程序后会调用 fork() 函数,把必要的通信频道都设置好之后父进程退出,留下守护进程的子进程。(以 fork 方式从父进程创建子进程,创建后父进程会立即退出)
3. oneshot: systemd中的Type=oneshot服务描述了这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。
4. dbus: 这个程序启动时需要获取一块 DBus 空间,所以需要和 BusName= 一起用。只有它成功获得了 DBus 空间,依赖它的程序才会被启动。
5. notify:这个程序在启动完成后会通过 sd_notify 发送一个通知消息。所以还需要配合 NotifyAccess 来让 Systemd 接收消息,后者有三个级别:none,所有消息都忽略掉; main,只接受我们程序的主进程发过去的消息; all,我们程序的所有进程发过去的消息都算。NotifyAccess 要是不写的话默认是 main。(当前服务启动完毕,会通知Systemd,再继续往下执行)
6. idle
· - `ExecStart`:用于指定服务的启动命令。
ExecStartPre: 启动当前服务之前执行的命令
ExecStartPost:启动当前服务之后执行的命令
ExecReload:重启当前服务时执行的命令
ExecStop:停止当前服务时执行的命令
ExecStopPost:停止当其服务之后执行的命令
RestartSec:自动重启当前服务间隔的秒数
Restart:定义何种情况 Systemd 会自动重启当前服务,可能的值包括always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdog
no(默认值):退出后不会重启;
always:不管是什么退出原因,总是重启;
on-success:只有正常退出时(退出状态码为0),才会重启;
on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启;
on-abnormal:只有被信号终止和超时,才会重启;
on-abort:只有在收到没有捕捉到的信号终止时,才会重启;
on-watchdog:超时退出,才会重启,如ssh服务设置为on-failure,表示任何意外的失败,就将重启sshd。如果sshd正常停止(比如执行systemctl stop命令),它就不会重启。
TimeoutSec:定义 Systemd 停止当前服务之前等待的秒数
RemainAfterExit:值为yes或no,表示进程退出以后,服务仍然保持执行。这样的话,一旦使用systemctl stop命令停止服务,ExecStop指定的命令就会执行。通常和type=oneshot配合使用
· - `WorkingDirectory`:用于指定服务的工作目录。进程工作目录,也就是说在执行前会先切换到这个目录
· - `Environment`:用于设置服务的环境变量。
· - `User`:用于指定服务运行的用户。
· - `Group`:用于指定服务运行的用户组。
[install]
· - WantedBy用于指定服务所属的启动级别(target):
poweroff.target:系统关机时的目标单元。
rescue.target:用于系统救援的目标单元,提供了一个最小的功能集合,用于修复系统问题。
multi-user.target:多用户模式的目标单元,用于正常的多用户操作。
graphical.target:图形界面模式的目标单元,用于启动图形界面环境。
reboot.target:系统重启时的目标单元。
- `RequiredBy`:用于指定哪些目标(target)依赖于该服务。
- Alias:当前 Unit 可用于启动的别名
- Also:当前 Unit 激活(enable)时,会被同时激活的其他 Unit
更多服务相关知识网络搜索: ubuntu 自启动service
命令
systemctl start 服务名 | 开启服务 |
systemctl stop 服务名 | 关闭服务 |
systemctl status 服务名 | 查看这个服务的状态 |
systemctl restart 服务名 | 重启服务 |
systemctl enable 服务名 | 使能开机启动服务 |
systemctl disable 服务名 | 禁止开机启动服务 |
systemctl list-units 服务名 | 查看当前服务 |
systemctl list-units | 查看系统中所有正在运行的服务 |
systemctl list-units --type=service | 查看所有已启动的服务 |
systemctl list-unit-files | 查看系统中所有服务的开机启动状态 |
systemctl list-unit-files 服务名 | 查看当前服务的开机启动状态 |
systemctl list-dependencies 服务名 | 查看系统中服务的依赖关系 |
systemctl mask 服务名 | 冻结服务 |
systemctl unmask 服务名 | 解冻服务 |
systemctl daemon-reload | 更新服务 |
systemctl restart 服务名 | 重启服务 |
systemctl is-enabled 服务名 | 验证是否为开机启动 |
systemctl set-default multi-user.target | 开机时不启动图形界面 |
systemctl set-default graphical.target | 开机时启动图形界面 |
systemctl status rc-local.service
服务状态的含义
状态 含义
active(running) 表示程序正在执行
atcive(exited) 执行一次就正常退出的服务,不在系统中执行任何程序
active(waiting) 正在执行中,处于阻塞状态,需要等待其他程序执行完才能执行
inactive (dead) 未启动状态
状态 含义
inactive 服务关闭
disable 服务开机不启动
enabled 服务开机启动
static 服务开机启动项被管理
failed 服务配置错误