Job*_*r69 3 init-script python systemd daemon
我不确定守护脚本的一般方法是什么。例如,我在网上搜索过,如果我试图编写一个 python 脚本来检查我计算机上每秒的时间,我所能想到的就是使用 systemd 来启动它,然后在 Python 中编写脚本用计时器结束循环。
这对我来说既没有意义,也不是一种很好的守护进程。我对 systemd 所做的只是在启动时使用它来运行脚本(和任何脚本),因此 systemd 本身似乎不是很有用。我想我可能在守护我的脚本时出错了,那么您知道使用 systemd 将 python 脚本转换为守护进程的更好方法是什么吗?
谢谢
systemd
不是万能的。它不会解决所有问题,但它确实为您提供了许多工具来帮助您解决问题。这些工具的有用性归结为您可以使用它们的程度。
让我们看一个非常基本的服务文件check-time.service
(注意,我手工创建了这个服务文件,使用位于的其他服务文件/usr/lib/systemd/system/
作为参考):
[Unit]
Description=Checks the time every second
[Service]
Type=simple
ExecStart=/usr/bin/check-time.py
Run Code Online (Sandbox Code Playgroud)
服务文件属于/usr/lib/systemd/system/
或/etc/systemd/system/
将被使用systemd
[*]
部分标题。这些只是将指令组合在一起。您可以在systemd
手册页中找到对哪些指令所属位置的引用:
[单位]部分
[服务]部分
[安装]部分
描述单位的自由格式字符串。这旨在用于在 UI 中显示描述性信息以及单位名称。描述应该包含一个对最终用户有意义的名称。“Apache2 Web 服务器”就是一个很好的例子。不好的例子是“高性能轻量级 HTTP 服务器”(过于通用)或“Apache2”(对于不了解 Apache 的人来说过于具体且毫无意义)。
配置此服务单元的进程启动类型。simple、forking、oneshot、dbus、notify 或 idle 之一。
如果设置为simple(Type=和BusName=都没有指定,但是ExecStart=都没有指定时的默认值),则期望ExecStart=配置的进程是服务的主进程。在这种模式下,如果该进程为系统上的其他进程提供功能,则应在守护进程启动之前安装其通信通道(例如,systemd 设置的套接字,通过套接字激活),因为 systemd 将立即进行启动后续工作单位。
在此服务启动时执行的带有参数的命令。根据下面描述的规则,该值被分成零个或多个命令行(参见下面的“命令行”部分)。
此服务文件将/usr/bin/check-time.py
在启动时简单地运行命令。如果命令退出,那么它会被认为是“死的”,只要它继续运行就被认为是“活动的”。
这个服务文件有多大用处?嗯,不是很。因为它唯一能做的就是允许您使用systemctl start check-time.service
而不是正常的完整路径来运行 python 脚本,但是还有很多有用的附加选项。
WantedBy如果您希望服务在启动时启动,请设置WantedBy=
您的默认目标。
Restart确定何时systemd
应该自动重启服务,例如“always”或“on-failure”
数以百计的其他选项,包括限制硬件使用、用户用于执行过程、设置环境变量、设置依赖项等等。systemd
对它提供的所有附加功能很有用,不仅仅是因为它可以包装东西。
归档时间: |
|
查看次数: |
7228 次 |
最近记录: |