我有一个包含一组二进制文件(基于 .NET 6)的 Deb 包,但是我们需要将这些应用程序作为服务安装在 Debian 计算机中。
我可以手动进行服务安装。,需要一些输入如何制作包含服务 bash 脚本的 Deb 包。
以下是我的脚本供您参考。任何意见将不胜感激。
#!/bin/bash
#IEC Service
sudo nano /etc/systemd/system/ProtocolService
[Unit]
Description=Protocol Service Provider
[Service]
WorkingDirectory= /home/debian/publish/ServiceProvider
ExecStart=/usr/bin/dotnet /home/debian/publish/ServiceProvider.dll
Restart=always
RestartSec=10 # Restart service after 10 seconds if dotnet service crashes
SyslogIdentifier=offershare-web-app
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target
#start the service
sudo systemctl daemon-reload
sudo systemctl enable service_name
sudo systemctl start service_name
答案1
最好的方法是使用德布帮助者的dh_installsystemd
,dh_systemd_enable
和dh_systemd_start
。
要使用这些,您所需要做的就是确保您的服务文件存在为debian/<package>.service
,然后将以下行添加到您的维护者脚本中 ( debian/{post,pre}{inst,rm}
)。
#DEBHELPER#
该行将替换为 Debian 当前的服务策略,该策略将启用/启动服务、处理升级和(取消)屏蔽服务。它还将确保尊重用户的全局配置(以防他们不希望默认启用服务)。
然后只需像平常一样构建您的包(dpkg-buildpackage
或debuild
)。您的服务将安装到正确的位置,并且一些辅助命令哪些调用start/enable/unmask/stop/disable...
操作将自动添加到您的维护者脚本中并安装。
进一步阅读:
如果您不使用debhelper
(也许您正在使用dpkg-deb
, cpack
,或自己用 打包ar
),则将systemctl enable
and添加systemctl start
到postinst
和systemctl disable
并systemctl stop
添加到prerm
。某些全局设置和边缘情况未以这种方式涵盖,但它大部分都可以工作。