Skip to content

systemd 使用简介#

在Linux系统中,可以使用systemd来配置一个服务(service),以便在系统启动时运行一个shell脚本。以下是一个简单的步骤来实现这个目标:

  1. 创建Shell脚本: 首先,你需要创建一个包含你想要在系统启动时执行的命令的Shell脚本。假设你的脚本名为myscript.sh,将其内容设置为你想要运行的命令。

  2. 创建Systemd服务单元文件: 现在,你需要创建一个Systemd服务单元文件,告诉Systemd如何运行你的脚本。这些文件通常位于/etc/systemd/system/目录下,文件名以.service为扩展名。你可以使用任何文本编辑器来创建这个文件,比如nanovim

sudo nano /etc/systemd/system/myscript.service
  1. 编辑Service单元文件: 在编辑器中,添加以下内容到myscript.service文件中,替换ExecStart行中的路径为你的脚本实际路径。
[Unit]
Description=My Script Service
After=network.target

[Service]
ExecStart=/path/to/myscript.sh
StandardOutput=null
StandardError=null

[Install]
WantedBy=multi-user.target

在这个示例中,Description是服务的描述,ExecStart是要运行的脚本的路径,Restart指定服务在失败时是否应该重新启动。

 [Unit]
 Description=MySQL Server
 After=network.target
 Requires=network-online.target

 [Service]
 Type=simple
 ExecStart=/usr/sbin/mysqld \
     --defaults-file=/etc/mysql/my.cnf \
     --basedir=/usr \
     --datadir=/var/lib/mysql \
     --plugin-dir=/usr/lib/mysql/plugin \
     --user=mysql \
     --log-error=/var/log/mysql/error.log \
     --pid-file=/var/run/mysqld/mysqld.pid
 Restart=on-failure
 RestartSec=10
 StandardOutput=null
 StandardError=null

 [Install]
 WantedBy=multi-user.target

在这个示例中,我们配置了以下参数:

Description:描述了服务的名称。 Documentation:提供了MySQL文档的链接。 After:指定服务在网络连接后启动。 ExecStart:指定MySQL的启动命令及其参数,例如配置文件位置、基础目录、数据目录等。 Restart:在服务失败时自动重新启动。 RestartSec:设置重新启动的间隔时间。 StandardOutput: 将服务的标准输出重定向到 /dev/null (丢弃) StandardError : 将服务的标准错误输出重定向到 /dev/null(丢弃)

  1. 启用并启动服务: 配置好Service单元文件后,你需要启用和启动这个服务。
sudo systemctl enable myscript.service
sudo systemctl start myscript.service

使用enable命令将服务添加到启动时运行的服务列表中,使用start命令启动服务。

  1. 检查服务状态: 你可以使用以下命令来检查服务的状态。
sudo systemctl status myscript.service

如果一切正常,你应该会看到服务正在运行。

现在,你的Shell脚本应该会在系统启动时自动运行。记住,要替换示例中的文件路径和脚本名称为你实际使用的路径和脚本名称。如果需要修改服务配置,可以使用sudo systemctl edit myscript.service命令来编辑Service单元文件。

  • 执行 /bin/my_exe & 可能会失败(主进程退出),直接执行 /bin/my_exe 或启动一个server进程,里面再去执行子进程指令。