简述
在配置自用服务器时,经常需要在开机后启动某些服务。
人工登录后手动启动服务肯定可行,但本文希望节省人工干预的时间。
省出来的时间可以用来陪家人、学习、锻炼身体,也可以用来发呆、睡觉,反正就不要花时间进行重复的机械性操作。
为此,本文使用 systemd 配置的方式让 Ubuntu 系统在开机且未登录的的状态下执行特定的 Shell 脚本。
systemd
systemd 可以看作是 Linux 系统下的服务管理者,已被应用到很多主流的 Linux 发行版中(如 Ubuntu, Debian, Fedora 等)用于系统管理。
如在 Ubuntu 20.04 上用命令行关机,可直接使用如下 systemd 提供的命令:
sudo systemctl poweroff
本文选取 systemd 实现开机执行 Shell 脚本有两个原因:
配置方法简便。
systemd 已被 Linux 发行版广泛采用,使用 systemd 在开机时执行脚本可以认为是一种官方建议做法。
通用操作步骤
创建希望开机马上执行的脚本,本文举例脚本存放位置为
/home/tqh/Documents/Example/StartupScipt.sh,脚本内容如下:
#!/bin/sh
开机时在脚本的同级目录下创建一个名为 StartupTouch.txt 的文件
touch /home/tqh/Documents/Example/StartupTouch.txt
开机执行的脚本需增加可执行权限才能被 systemd 运行,使用如下命令
chmod u+x /home/tqh/Documents/Example/StartupScipt.sh
chmod g+x /home/tqh/Documents/Example/StartupScipt.sh
进入 systemd 放置 service 的目录,在该目录下可看到大量服务配置文件,命令如下
进入 systemd 的 service 目录
cd /etc/systemd/system
查看文件列表
ls -al
在该目录创建一个新的 .service 文件用于配置开机启动脚本,本例中的文件名为 StartupExample.service,所执行命令和文件中的配置内容如下:
创建服务配置文件
sudo touch /etc/systemd/system/StartupExample.service
以下为 StartupExample.service 配置文件的内容
[Unit]
Description=Startup Example
[Service]
ExecStart=/home/tqh/Documents/Example/StartupScipt.sh
[Install]
WantedBy=multi-user.target
尝试手动运行新创建的 service,使用如下命令:
手动运行 StartupExample.service
sudo systemctl start StartupExample.service
查看运行日志
systemctl status StartupExample.service
将服务设置为 enable 状态,再重启计算机,看服务是否能正常运行
删除刚测试服务时创建的文件
rm -f /home/tqh/Documents/Example/StartupTouch.txt
设置服务为 enable 状态,使之能开机运行
sudo systemctl enable StartupExample.service
重启机器
systemctl reboot