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