如何在 Linux 中将 Shell 脚本作为 Systemd 服务运行

Systemd 是一个服务管理器,为您提供管理守护进程、进程跟踪、挂载、自动挂载的功能。 它使用 Linux 控制组来管理任务。 它取代了旧的 initd 并在 Debian 中可用, Fedora、RedHat、ubuntu、centos、arch Linux 发行版。

在本文中,我将向您展示如何使用 systemd 创建服务。 我将制作一个手动脚本,其作用类似于查找 Linux 系统磁盘利用率的过程。

让我们开始吧。 做一个 bash 在文件中重定向日期和磁盘利用率的脚本。 您可以在任何位置创建文件。 这里我要在可执行目录/usr/bin

$ sudo vim /usr/bin/script.sh

复制并粘贴以下脚本并保存文件。

#!/bin/bash

# Script generates disk utilization by the system and store in a file

while true

do

date >> /var/storage-monitor.txt

sudo du -sch / >> /var/storage-monitor.txt

sleep 120

done

通过运行以下命令使文件可执行。

$ chmod +x /usr/bin/script.sh

现在,让我们创建一个运行脚本的服务。 只需在以下目录中创建一个文件。 请注意,您可以提供任何名称,但必须以 .service 扩展名结尾。

$ vim /etc/systemd/system/monitor-disk.service

并添加以下内容,

[Unit]

Description=My disk monitoring service

Documentation=https://www.kernel.org/

#After=networking.service

[Service]

Type=simple

User=root

Group=root

TimeoutStartSec=0

Restart=on-failure

RestartSec=30s

#ExecStartPre=

ExecStart=/usr/bin/script.sh

SyslogIdentifier=Diskutilization

#ExecStop=

[Install]

WantedBy=multi-user.target

解释

  • 这 [Unit] 部分由描述、文档详细信息组成。 在这里,我提到了“之后”,它表明我们要创建的服务必须首先运行。
  • [Service] 部分定义了服务类型,用户名,组,失败时做什么,重启超时。 主要是“ExecStart”,它表示启动我们的脚本文件。 您还可以定义“ExecStartPre”以在实际脚本文件之前定义任何内容。 ‘SyslogIdentifier’ 是在 syslog 中识别我们服务的关键字。 同样, ExecStop 是说明如何停止服务的指令。
  • [Install] section用于定义系统中不同级别的目标。

只需保存文件并使用 systemctl 命令启动服务。

$ systemctl start monitor-disk.service

使用 systemctl status 命令检查服务状态。 您还可以查看服务名称、加载 systemd 服务的文件格式、文档、进程运行和日志。

$ systemctl status monitor-disk.service

通过查看脚本文件中定义的文件来验证您的脚本是否正常工作。

$ cat /var/storage-monitor.txt

您还可以检查 systemd 管理器的启用、禁用功能。

$ systemctl enable monitor-disk.service
$ systemctl disable monitor-disk.service

此外,通过停止和重新启动服务进行检查。 不应抛出任何错误。

$ systemctl stop monitor-disk.service
$ systemctl restart monitor-disk.service

Systemd 还启用了 syslog 中的默认日志记录。 因此,您可以使用以下命令查看服务的实时日志。 搜索关键字“SyslogIdentifier=Diskutilization”

您在上述服务文件中拒绝。

$ tail -f /var/log/syslog

结论

本文将向您展示如何将自己的 shell 脚本作为 systemd 服务运行。 我们希望您学会了如何制作自己的服务。 请随时发送您的反馈。