- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的警报.py
from daemon import Daemon
import os, time, sys
class alertDaemon(Daemon):
def run(self):
while True:
time.sleep(1)
if __name__ == "__main__":
alert_pid = '/tmp/ex.pid'
# if pid doesnt exists run
if os.path.isfile(alert_pid): # is this check enough?
sys.exit(0)
daemon = alertDaemon(alert_pid)
daemon.start()
鉴于没有其他程序或用户会创建 pid 文件:
1) 是否存在pid不存在守护进程还在运行的情况?
2) 是否存在 pid 存在但守护进程未运行的情况?
因为如果至少对上述问题之一的回答是肯定的,那么如果我的目标是让一个守护进程始终运行,那么仅仅检查 pid 文件是否存在是不够的。
问:如果我必须检查进程,我希望避免像系统调用 ps -ef 和 grep 之类的脚本名称。有执行此操作的标准方法吗?
注意:脚本 myalert.py 将是一个 cronjob
最佳答案
python-daemon
库,它是 PEP 3143 的引用实现:“标准守护进程库”,通过在传递给 DaemonContext
对象的 pid 文件上使用文件锁(通过 lockfile
库)来处理此问题。底层操作系统保证在守护进程退出时释放文件锁,即使它是不干净地退出的。这是一个简单的用法示例:
import daemon
from daemon.pidfile import PIDLockFile
context = daemon.DaemonContext(
pidfile= PIDLockFile('/var/run/spam.pid'),
)
with context:
main()
因此,如果一个新实例启动,它不必确定创建现有 pid 文件的进程是否仍在通过 pid 本身运行;如果它可以获得文件锁,则没有其他实例正在运行(因为它们已经获得了锁)。如果它无法获取锁,则必须运行另一个守护进程实例。
您遇到麻烦的唯一方法是有人在守护程序运行时出现并手动删除了 pid 文件。但我认为您不必担心有人故意以这种方式破坏东西。
理想情况下,python-daemon
将成为标准库的一部分,这也是 PEP 3143 的最初目标。不幸的是,PEP 被推迟了,主要是因为没有人愿意真正去做加入标准库所需的剩余工作:
Further exploration of the concepts covered in this PEP has been deferred for lack of a current champion interested in promoting the goals of the PEP and collecting and incorporating feedback, and with sufficient available time to do so effectively.
关于Python 守护进程 : checking to have one daemon run at all times,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26123137/
在前台程序上运行 valgrind 很容易。但是 valgrind 会为守护程序工作并在执行后给出输出。我该怎么做? 谢谢 最佳答案 是的,valgrind 肯定适用于守护程序。 许多守护进程都有某种
网络上有很多守护进程的示例实现。我看到的大多数不使用 daemon(3) 函数在后台运行程序。这只是品味、无知的问题,还是有充分的理由编写我自己的 daemonize 函数?使用 daemon(3)
我使用 apache commons 示例代码编写了一个守护进程: public class LockDaemon implements Daemon { @Override public void
docker出现cannot connect to the docker daemon. is the docker daemon running on this host错误解决办法 发生现象:
我正在使用 Ruby Daemon-kit 设置一个服务,为我的 Rails 应用程序执行各种后台操作。 当我在命令行上调用时它工作正常: ./bin/bgservice 我如何为它创建一个守护进程
当我尝试使用命令'react-native run-android'构建项目时,出现以下错误: 错误:无法找到或加载主类“Dorg.gradle.daemon = true” JS server al
我正在尝试从以下位置安装 memcached:http://blog.elijaa.org/index.php?post/2010/10/15/Memcached-for-Windows&simila
我使用 Xcode 创建了一个命令行工具应用程序。在那个应用程序中,我使用 NSWorkspace 来启动另一个应用程序包 (.app),如此处建议的那样。 MacOsX: How to launch
我正在尝试在一些Ubuntu 14.04流浪者盒子上使用consul设置docker swarm,但是docker守护程序存在问题。我已经在运行progrium / consul容器和swarm ma
我把android studio升级到3.2.0,并创建了默认项目。但是编译器报错: Android resource linking failed Output: D:\android1\proj
首先 - 我知道 UWSGI 建议使用 smart-attach-daemon 来自:http://uwsgi-docs.readthedocs.io/en/latest/AttachingDaemo
2018/09/27 我把android studio升级到3.2.0,并创建了默认项目。但是编译器报错: Android resource compilation failed Output: C
错误: Error 1 "bin\Debug\Daemon.exe.manifest;bin\Release\Daemon.exe.manifest" is an invalid value fo
尝试构建 Android 应用程序时出现此错误: > A failure occurred while executing com.android.build.gradle.internal.task
我已经从源码包安装了mysql-5.6.14 尝试开始: vaio1@vaio1-VPCEA3S1E:mysqld 2013-11-17 13:22:18 0 [Warning] Using uni
我知道一些(全部?)守护进程在启动时会 fork 。我的印象是,这是将子进程作为特权较低的用户运行,特别是如果守护进程类似于 HTTP 服务器。 为什么这是必要的?如果不 fork 子进程,进程就不能
我目前正在开发一个守护进程,它将执行很多不同的任务。它是多线程的,并且正在构建以处理几乎任何类型的内部错误而不会崩溃。好吧,我正在处理关闭请求,但我不确定我应该如何去做。 我有一个关闭 Hook 设置
Windows Server的Docker Windows Server 1709版,带有容器 Docker版本17.06.2-ee-6,构建e75fdb8 群集模式(工作程序节点,具有Ubuntu母
使用截至2017年8月25日的最新版本的Docker,我知道Docker不再需要VirtualBox安装程序以及boot2docker才能正常工作。但是,在尝试连接到它并使用docker-compos
是否使用 C 函数 daemon()与使用 fork()、setsid()、umask()、 等显式函数(除了无法设置所有守护进程参数之外)相比,Linux 守护进程在安全性或稳定性方面有任何劣势吗?
我是一名优秀的程序员,十分优秀!