如何在 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