我有一个作为服务运行的Python脚本。它写入磁盘。如果用户在服务上调用systemctl stop,我想以自己的方式处理该命令,以降低文件损坏的风险。
如何捕获systemctl停止命令?
我在 /usr/lib/systemd/system的文件是:
[Unit]
Description=foo
[Service]
Type=simple
ExecStart=/usr/bin/python /srv/go.py
User=jon
Restart=always
[Install]
WantedBy=graphical.target
我的Python脚本是:
#!/usr/bin/python
import time
import datetime
import threading
def worker():
while True:
with open('/tmp/go.txt', 'a') as f:
s = str(datetime.datetime.utcnow()) + '\n'
f.write(s)
print(s)
time.sleep(1)
if __name__=='__main__':
t = threading.Thread(target=worker)
t.start()
如systemd文档中所述,进程将收到SIGTERM,然后立即收到SIGHUP。一段时间后,将发送SIGKILL。
所有信号以及发送它们的策略都可以在相关服务文件中更改。
请参阅另一个stackoverflow问题,以了解如何在Python程序中处理这些信号。
问题内容: 我正在尝试从网站获取一些数据。然而,这又使我回来了。我试图获取的数据是大量的嵌套链接。我在线进行了一些研究,发现这可能是由于服务器错误(在达到预期大小之前完成了分块的传输编码)。我还在此链接上找到了以上解决方法 但是,我不确定如何在我的案例中使用它。以下是我正在处理的代码 请帮助我。谢谢 问题答案: 您包含在问题中的链接只是执行urllib的read()函数的包装程序,该函数可以为您捕
问题内容: 由于缺乏对我想使用的某些库的支持,我将一些Python开发从Windows迁移到Linux开发。我整天的大部分时间都在搞弄依赖关系无所适从。 问题 每当我选择Linux时,无论是通过apt-get,easy_install还是pip进行安装,我通常都会遇到某种依赖问题,通常与开发库有关。我本可以将几天的时间浪费在应该是简单的任务上,而不是编写代码,而要花更长的时间使库工作。 在哪里可以
问题内容: 我正在Spark中将模型实现为python类,并且每次尝试将类方法映射到RDD时,它都会失败。我的实际代码更加复杂,但是这个简化的版本成为了问题的核心: 现在,如果我像这样运行模型(例如): 我收到以下错误: 例外:看来您试图从广播变量,操作或转换中引用SparkContext。SparkContext只能在驱动程序上使用,而不能在工作程序上运行的代码中使用。有关更多信息,请参见SPA
问题内容: 我在使用Python进行面向对象的编程方面非常陌生,并且在理解函数(新样式类)时遇到困难,特别是在涉及多重继承时。 例如,如果你有类似的东西: 我不明白的是:该类会继承两个构造函数方法吗?如果是,那么哪个将与一起运行,为什么? 而如果要运行另一个呢?我知道这与Python方法解析顺序有关。 问题答案: Guido自己在他的博客文章(包括两次较早的尝试)中对此进行了合理的详细说明。 在你
问题内容: 我是Python的新手,对日期/时间文档感到困惑。我想计算执行计算所需的时间。 在Java中,我会这样写: 我确信在Python中它甚至更容易。有人可以帮忙吗? 问题答案: 在python中等效为: 如果您试图找到性能最好的方法,那么您可能应该看看。
问题内容: 背景 我刚刚将Pandas从0.11升级到0.13.0rc1。现在,该应用程序弹出许多新警告。其中之一是这样的: 我想知道到底是什么意思?我需要改变什么吗? 如果我坚持使用该如何警告 产生错误的函数 更多错误讯息 问题答案: 在被创造的标志可能造成混淆的“链接”的任务,比如下面这并不总是如预期的工作,特别是当第一选择返回一个副本。[ 有关背景讨论,请参见GH5390和GH5597。]