如何在 systemd 中创建自定义服务?

如何在 systemd 中创建自定义服务?

在多台机器上运行 Fedora 33/34。我成功激活了rc-local.service它,它工作正常。我有几个其他脚本需要运行/etc/init.d/,我创建了类似的服务文件rc-local.service,但我无法启用它,而 rc-local.service 可以毫无问题地启用/禁用/启动/停止。
我知道,我有一个选项(我目前使用)可以从文件中调用这些脚本rc.local,但宁愿将它们单独调用为服务。所以我的服务文件如下所示:
#cat net-scr1.service

[Unit]
Description=Network check service
ConditionFileIsExecutable=/etc/init.d/net-scr1
After=network.target 

[Service]
Type=forking
ExecStart=/etc/init.d/net-scr1 start
TimeoutSec=3
ExecStop=/etc/init.d/net-scr1 stop
RemainAfterExit=yes
GuessMainPID=no
StandardOutput=tty

[Install]
 WantedBy=multi-user.target

systemctl enable net-scr1

Synchronizing state of net-scr1.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable net-scr1
service net-scr1 does not support chkconfig

我把脚本移出,想着init.d也许 systemd 认为这是一个旧sysv脚本,但没有变化。我的脚本中应该包含什么才能正常工作?
我的脚本如下所示:

#!/bin/bash
[email protected]
[email protected]
dv0=p1p1
ipdv0=`ifconfig $dv0 | grep "inet " | awk '{print $2}'`
if [ "$1" = "stop" ]; then
  cat $msg | mail $EMFR -s "$srv-shut_down-ip-$ipdv0" $eml
fi
if [ "$1" = "start" ]; then
  cat $msg | mail $EMFR -s "$srv-booted_up-ip-$ipdv0" $eml  

fi

我应该包含旧 sysv 系统中的函数还是其他函数?谢谢

答案1

看到这个

  1. cd /etc/systemd/系统
  2. 创建一个名为 your-service.service 的文件并包含以下内容:
[Unit]
Description=<description about this service>

[Service]
User=<user e.g. root>
WorkingDirectory=<directory_of_script e.g. /root>
ExecStart=<script which needs to be executed>
Restart=always

[Install]
WantedBy=multi-user.target

答案2

我找到了一个解决方案。我在脚本顶部添加了以下 3 行:
head /etc/init.d/net-scr1

# net-scr1          Start/Stop the net script1
# chkconfig: 345 90 10
# description: net-scr1 sends alert on reboot

现在systemctl enable net-scr1 工作正常

相关内容