CentOS 8 和 Ubuntu 20.04.2 LTS 中,您可以通过不同的方法实现在系统启动时自动运行特定指令或脚本

在 CentOS 8 和 Ubuntu 20.04.2 LTS 中,您可以通过不同的方法实现在系统启动时自动运行特定指令或脚本。这里是关于两种方法的解释和区别:

### 方法一:使用 `rc-local.service`

**CentOS 8 示例:**

 

$ cat /etc/rc.local_my.sh
#!/bin/bash
/bin/bash -c "ip -6 route add default via fe80::f816:3eff:fe14:d7bd dev eth0"
/bin/bash -c "ip route add default via 192.168.0.1"

 

vim /etc/systemd/system/rc-local.service
[Unit]
Description=/etc/rc.d/rc.local_my.sh Compatibility
ConditionPathExists=/etc/rc.d/rc.local_my.sh

[Service]
Type=forking
ExecStart=/etc/rc.d/rc.local_my.sh
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target
`====================================================================================================``

**Ubuntu 20.04.2 LTS 示例:**

 

$ cat /etc/rc.local_my.sh
#!/bin/bash
/bin/bash -c "ip -6 route add default via fe80::f816:3eff:fe14:d7bd dev eth0"
/bin/bash -c "ip route add default via 192.168.0.1"

 

vim /etc/systemd/system/rc-local.service
[Unit]
Description=Run /etc/rc.local_my.sh at startup

[Service]
Type=oneshot
ExecStart=/etc/rc.local_my.sh

[Install]
WantedBy=multi-user.target
```

#### 区别与适用性:

1. **Type 属性**:
- **CentOS 8**: 使用 `Type=forking`,适用于那些会 fork 出子进程并且父进程退出的情况,比如经典的 SysV init 脚本。
- **Ubuntu 20.04.2 LTS**: 使用 `Type=oneshot`,适用于一次性任务,即启动脚本后等待其完成,然后服务即标记为已完成。

2. **执行方式**:
- **CentOS 8**: 使用 `forking`,表示服务启动后会执行 `rc.local_my.sh` 脚本,然后父进程可能会退出,但子进程仍在后台运行。
- **Ubuntu 20.04.2 LTS**: 使用 `oneshot`,表示服务启动后会执行 `rc.local_my.sh` 脚本,然后等待其完成,服务任务完成后标记为完成。

3. **适用性**:
- 如果您的脚本或命令需要在启动时启动一个长期运行的服务或守护进程,可以选择 CentOS 8 的 `forking` 方式。
- 如果您只是希望在启动时执行一次性操作,并在完成后退出,可以选择 Ubuntu 20.04.2 LTS 的 `oneshot` 方式。

### 建议:

- 在 CentOS 8 中,使用 `rc-local.service` 的方式更符合经典的 `rc.local` 使用习惯,特别是对于那些需要在后台持续运行的任务。
- 在 Ubuntu 20.04.2 LTS 中,使用 `rc-local.service` 的 `oneshot` 方式更符合 systemd 单元的设计理念,特别适合一次性操作和简单的启动脚本。

无论选择哪种方法,都应该根据您的具体需求和操作习惯来决定。

posted @ 2024-08-02 16:50  闻道者  阅读(48)  评论(0)    收藏  举报