daemon

Implementing a full Python Unix-style daemon process

走远了吗. 提交于 2020-04-10 04:53:09
问题 I'm currently trying to manually create a simple daemon process, I don't want to use the existing externals libraries to avoid overhead. I'm currently checking when my process runs that it doesn't have a PID file already created (meaning it's running), like described in this post. I also have a daemonizing module to detach the PID from current process and redirect stdout and stderr (so my daemon will keep running even if I end my session): import os import sys def daemonize(stdin="/dev/null",

php 守护进程(Daemon)

不羁的心 提交于 2020-04-07 16:42:02
守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。 很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。 守护进程一直在后台运行,脱离终端运行的程序 独立运行的守护进程。 <?php。 class myProcess { const UID = 80; const GID = 80; protected $loop = true; protected $pidFile = "/tmp/myprocess.pid"; //protected $data = "123132132\r\n"; private function checkPidFile() { if(file_exists($this->pidFile)) { echo "daemon process is already runing.\n"; exit(); } } private function daemon() { $pid = pcntl_fork(); if ($pid == -1) { exit("fork fail"); }else if($pid == 0){ $this->handler(); }else{ exit(); } } private function handler() { posix_setsid(); posix_setuid(self::UID)

[CentOS7] systemd

可紊 提交于 2020-04-07 07:32:01
声明:本文主要总结自: 鸟哥的Linux私房菜-第十七章、認識系統服務 (daemons) ,如有侵权,请通知博主 查看当前系统设定的服务启动脚本的类型:ls /usr/lib/systemd/system | cut -d '.' -f 2 | sort | uniq 1. /usr/lib/systemd/system  ==> 每个服务最主要的启动脚本设定 2. /run/systemd/system  ==> 系统过程中所产生的服务脚本 3. /etc/systemd/system  ==> 该目录下都是soft link文件,软链接到/usr/lib/systemd/system目录下的启动脚本,因此该目录决定了开机启动后开启哪些服务 优先级顺序:3 > 2 > 1 副檔名 主要服務功能 .service 一般服務類型 (service unit):主要是系統服務,包括伺服器本身所需要的本機服務以及網路服務都是!比較經常被使用到的服務大多是這種類型! 所以,這也是最常見的類型了! .socket 內部程序資料交換的插槽服務 (socket unit):主要是 IPC (Inter-process communication) 的傳輸訊息插槽檔 (socket file) 功能。 這種類型的服務通常在監控訊息傳遞的插槽檔,當有透過此插槽檔傳遞訊息來說要連結服務時

CentOS7上安装Docker

余生颓废 提交于 2020-04-04 22:50:12
安装 Docker分为Docker CE和Docker EE两种版本。 Docker CE即社区免费版,Docker EE即企业版,强调安全,但需付费使用。 安装Docker CE 删除已有Docker yum remove docker \          docker-client \          docker-client-latest \          docker-common \          docker-latest \          docker-latest-logrotate \          docker-logrotate \          docker-selinux \          docker-engine-selinux \          docker-engine 安装必要的系统工具 yum install -y yum-utils device-mapper-persistent-data lvm2 添加软件源信息 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 更新yum缓存 yum makecache fast 安装Docker-ce yum -y install

linux 用户和组

北战南征 提交于 2020-04-04 08:47:12
在linux中每一个用户都有唯一的uid,linux内核根据uid区分不同的用户,同样每一个用户组,也有唯一的gid,一个组下可以存在多个账户, 如果给group添加上了权限A,那么属于这个组的全部用户都拥有这个权限, 每一个用户都可以加入多个组,但是肯定有一个是它的主要组 与用户和账户相关的文件 /etc/passwd 查看文件内容如下: [root@ecs-t6-large-2-linux-20190824103606 ~]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin ... tcpdump:x:72:72::/:/sbin/nologin dockerroot:x:997:994:Docker User:/var/lib/docker:/sbin/nologin 每行都有七个字段: 字段1: 用户账户名 字段2: 密码的占位符 字段3: UID 字段4: GID 字段5: 用户名全称 字段6: 宿主目录 字段7: 登录shell /etc/passwd 的第二个字段, 是两个!! , 表示账号被禁用 用户的用户是系统用户, 一般系统用户的登录shell都是 /sbin

Android Sutido 编译速度优化

浪尽此生 提交于 2020-04-03 05:46:59
虽然 Android Studio 此时已经更新到了Android Studio 2.1版本,build 版本android-studio-bundle-143.2739321。但是在安装该版本都是根据自己的标准进行安装,所以需要在安装之后进行一系列的调整。下面文章根据3个方面进行讲解。分别为Android Studio本身、Gradle、不调整出现的编译上的问题。 Android Studio优化 编译优化需要有两个步骤,以下一一介绍。 步骤一:Gradle编译优化 在项目的根目录中进行修改。修改gradle.properties, gradle.properties 该文件的位置(H/gradle.properties) Project-wide Gradle settings. IDE (e.g. Android Studio) users: Gradle settings configured through the IDE will override any settings specified in this file. For more details on how to configure your build environment visit http://www.gradle.org/docs/current/userguide/build

K8S 之概念DaemonSet 对象

心不动则不痛 提交于 2020-03-31 03:48:17
什么是 DaemonSet? 编写 DaemonSet 规约 必需字段 Pod 模板 Pod Selector 仅在某些节点上运行 Pod 如何调度 Daemon Pod 与 Daemon Pod 通信 更新 DaemonSet DaemonSet 的可替代选择 init 脚本 裸 Pod 静态 Pod Replication Controller 什么是 DaemonSet? DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。当有节点加入集群时,也会为他们新增一个 Pod 。 当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。 使用 DaemonSet 的一些典型用法: 运行集群存储 daemon,例如在每个节点上运行 glusterd、ceph。 在每个节点上运行日志收集 daemon,例如fluentd、logstash。 在每个节点上运行监控 daemon,例如 Prometheus Node Exporter、collectd、Datadog 代理、New Relic 代理,或 Ganglia gmond。 一个简单的用法是在所有的节点上都启动一个 DaemonSet,将被作为每种类型的 daemon 使用。 一个稍微复杂的用法是单独对每种 daemon 类型使用多个 DaemonSet

k8s运行DaemonSet控制器管理pod(8)

空扰寡人 提交于 2020-03-30 13:32:00
前面介绍了k8s的deployment和statefulset这两种控制器。 deployment是属于无状态的服务,nginx,Tomcat,没有关联的pod statefulset是属于有状态的服务。mysql,zk、etcd,集群形式的pod 下面我们来介绍一下第三种方式DaemonSet这种控制器模式 DaemonSet 的典型应用场景: 在集群的每个节点上运行存储 Daemon,比如:glusterd 或 ceph。 在每个节点上运行日志收集 Daemon,比如:flunentd 或 logstash。 在每个节点上运行监控 Daemon,比如:Prometheus Node Exporter 或 collectd。 DaemonSet 与 Deployment 的区别 Deployment 部署的副本 Pod 会分布在各个 Node 上,每个 Node 都可能运行好几个副本。 DaemonSet 的不同之处在于:每个 Node 上最多只能运行一个副本。 总结: DaemonSet这种控制器方式,主要是用来对node节点上面每个节点平均分配一个pod的,比如每个node节点上面运行的监控agent,或者是收集日志的agent。。。 -----------------------------------------------------------------------

PHP使用QPM实现多进程并行任务处理程序

六眼飞鱼酱① 提交于 2020-03-27 17:34:23
3 月,跳不动了?>>> 考虑用PHP实现以下场景: 有一个抓站的URL列表保存在队列里,后台程序读取这个队列,然后转交给子进程去抓取HTML存放到文件里。 为了提高效率,允许多任务并行执行,但为了避免机器负载过高,限制了最大的并行任务数(为了测试方便,我们把这个数设为3),当队列中取到 END标记时,程序结束运行。 这个场景用QPM的Supervisor::taskFactoryMode()实现,非常简单。 QPM全名是 Quick Process Management Module for PHP. PHP 是强大的web开发语言,以至于大家常常忘记PHP 可以用来开发健壮的命令行(CLI)程序以至于daemon程序。 而编写daemon程序免不了与各种进程管理打交道。QPM正式为简化进程管理而开发的类库。QPM的项目地址是: https://github.com/Comos/qpm 为了,简化测试环境,我们可以用一个文本文件来模拟队列的数据。完整的例子文件看这里: spider_task_factory_data.txt http://ent.ifeng.com/ http://news.sina.com.cn/ http://news.ifeng.com/ http://news.163.com/ http://news.sohu.com/ http://ent.sina

QPM-PHP进程管理框架

喜欢而已 提交于 2020-03-27 17:14:33
3 月,跳不动了?>>> QPM全名是 Quick Process Management Framework for PHP. PHP 是强大的web开发语言,以至于大家常常忘记PHP 可以用来开发健壮的命令行(CLI)程序以至于daemon程序。 而编写daemon程序免不了与各种进程管理打交道。QPM正是为简化进程管理而开发的类库。 QPM的项目地址是: https://github.com/Comos/qpm 以下是用QPM编写多进程程序的小例子。 //定义 mission1:每隔3秒打印一次进程信息, 无限循环。 $mission1 = function() { while(true) { echo "---mission 1, pid:".posix_getpid()."\n"; sleep(3); } }; //定义 mission2:打印信息后 3秒后退出。 $mission2 = function() { echo "+++mission 2,pid:".posix_getpid()."\n"; sleep(3); }; //配置: mission 1 和mission 2 同时在子进程中执行。mission 1 只允许在一个子进程中执行,mission 2 则允许2个子进程并行执行。 $config = [ ['runnableCallback'=>