Mr.Blog


  • 首页

  • 归档

  • 标签

  • 分类

  • 搜索

任务调度

发表于 2018-12-31 | 分类于 WorkerMan
启动流程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1. 运行命令 php TaskScheduling.php start -d
2. checkEnv 检测运行环境
3. init 初始化
3.1 定义保存主进程ID的文件(pidFile)
3.2 生成日志文件(logFile)
3.3 设置主进程标题
3.4 定时器初始化
4. parseCommand 解析命令
4.1 检查命令是否正确
4.2 检测主进程是否存在,避免重复运行
5. daemonize 以守护进程模式运行,即后台运行
6. installSignal 安装信号
7. saveMasterPid 保存主进程ID到文件(pidFile)
8. forkProcess 循环创建子进程,到这一步后,主进程和子进程开始执行各自的逻辑
8.1 主进程
8.1.1 保存创建的子进程ID(childPidMap)
8.1.2 resetStd 关闭标准输出
8.1.3 monitorProcess 监控进程
8.1.3.1 监控子进程退出(异常退出时记录日志并重新启动)
8.1.3.2 监控主进程退出(前提是子进程已全部退出)
8.2 子进程
8.2.1 执行回调函数 onStart
8.2.2 循环检查是否有未处理的信号
停止流程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1. 运行命令 php TaskScheduling.php stop
2. checkEnv 检测运行环境
3. init 初始化
3.1 定义保存主进程ID的文件(pidFile)
3.2 生成日志文件(logFile)
3.3 设置主进程标题
3.4 定时器初始化
4. parseCommand 解析命令
4.1 检查命令是否正确
4.2 检测主进程是否存在,避免重复运行
4.3 发送停止信号给主进程
4.3.1 signalHandler 触发安装信号时的回调函数
4.3.2 stopAll 停止所有进程
4.3.2.1 发送停止信号给所有子进程,到这一步后,主进程和子进程开始执行各自的逻辑
4.3.2.1.1 主进程
I. 如果不是优雅停止,则启用定时器,2秒后杀死子进程
II. 每隔1秒检测子进程是否被杀死,若已被杀死,则释放childPidMap对应的pid
III. monitorProcess 监听到子进程退出,则释放childPidMap对应的pid,当子进程全部退出后,则退出主进程,并删除主进程PID的保存文件
4.3.2.1.2 子进程
I. signalHandler 触发安装信号时的回调函数
II. stopAll 停止所有进程
III. 执行回调函数 onStop
IV. 退出子进程
阅读全文 »

RAP2 安装

发表于 2018-12-17 | 分类于 Other

RAP2 一个可视化接口管理工具, 需要部署前后端服务
后端数据API服务器 基于Koa + MySQL
前端静态资源 基于React

部署前准备:

  1. 服务器环境 Centos7, IP地址 192.168.1.18
  2. Node.js
  3. Redis
  4. MySQL
  5. Git
后端服务部署
  1. 获取源代码 git clone https://github.com/thx/rap2-delos.git
  2. 创建数据库 CREATE DATABASE IF NOT EXISTS rap2 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
  3. 初始化 npm install
    阅读全文 »

socket 即时通讯

发表于 2018-10-29 | 分类于 PHP

看了 workerman 源码后, 实现的一个简单DEMO
前置知识:守护进程以及信号 posix/pcntl、socket 编程 socket/stream_socket
ps:若想多进程, 多执行几次 forkProcess 就行, 但是像进程间通信, 尚未实现

阅读全文 »

umask

发表于 2018-10-29 | 分类于 PHP

umask 指定当前用户在新建文件或目录时候的权限默认值
umask 有四个数字, 第一个为特殊权限, 一般不予考虑, 后三个与一般权限有关
umask 设置的值为 需要减掉的权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
/**
* umask(0) 0取反再创建文件时权限相与,也就是:(~0) & mode 等于八进制的值0777 & mode了
*
* 创建文件:默认没有x权限,只有r、w权限, 最大为666 -rw-rw-rw-
* 创建目录:最大为777, drwxrwxrwx
*/
umask(0);
// test.txt 文件权限为 666
file_put_contents('test.txt', 'test');
// test 目录权限为 777
mkdir('test');

/**
* umask(0022) - 用户组和其它组减去 w 权限, 即创建的文件权限为 644 -rw-r--r-- , 创建的目录权限为 755 drwxr-xr-x
*/
umask(0);
// test.txt 文件权限为 644
file_put_contents('test.txt', 'test');
// test 目录权限为 755
mkdir('test');

Vmware 搭建 Centos7 后的网络配置

发表于 2018-02-02 | 更新于: 2018-10-29 | 分类于 Linux

安装包

VMwareworkstation_full_12.1.0.2487.1453173744.exe 【密匙:5A02H-AU243-TZJ49-GTC7K-3C61N】
CentOS-7-x86_64-DVD-1511.iso

网卡配置

  1. 查看网卡名称和硬件地址

    1
    ip addr

  2. 修改网卡配置

    1
    2
    3
    4
    5
    6
    7
    cd /etc/sysconfig/network-scripts/
    vi ifcfg-eno16777736
    #修改 NAME 和 DEVICE 的值为 eth0, ONBOOT 的值为 yes, 添加 HWADDR 硬件地址(上面通过ip addr 所查询到的硬件地址)
    NAME=eth0
    DEVICE=eth0
    ONBOOT=yes
    HWADDR=00:0c:29:7b:ed:a9
  3. 重命名 ifcfg-eno16777736 配置文件

    1
    mv ifcfg-eno16777769 ifcfg-eth0
  4. 禁用该可预测命名规则,对于这一点,可以在启动时传递 “net.ifnames=0 biosdevname=0” 的内核参数

    1
    vi /etc/default/grub

    阅读全文 »

PHP Socket 服务端与客户端的通信(IO阻塞/复用)

发表于 2018-10-18 | 分类于 PHP

PHP Socket 编程提供了两套API:
socket_* 系列, 需要安装 socket 扩展(更底层)
stream_socket_* 系列, 不需要安装扩展(推荐使用, 更方便)

ps:分别以 socket 扩展 和 stream_socket 实现了服务端与客户端的通信,测试方式一样

阅读全文 »

数据库动态配置定时任务

发表于 2018-10-12 | 分类于 PHP

基于 Symfony 框架, 不同框架原理一样

数据表
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE `task` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '任务ID task_id',
`name` varchar(32) NOT NULL COMMENT '任务名称',
`desc` varchar(255) NOT NULL DEFAULT '' COMMENT '任务描述',
`controller` varchar(255) NOT NULL COMMENT '控制器名称',
`action` varchar(255) NOT NULL COMMENT '操作名称',
`interval_time` int(11) unsigned NOT NULL COMMENT '间隔时间,单位:秒',
`last_execution_time` datetime DEFAULT NULL COMMENT '最后一次执行时间',
`log_path` varchar(255) NOT NULL COMMENT '日志路径',
`status` smallint(1) NOT NULL DEFAULT '0' COMMENT '状态 0:停止, 1:启用',
`generate_time` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='定时任务表';
Linux Crontab 或 Windows 计划任务 定时执行PHP文件(可创建多个相同任务)
1
*/1 * * * * /alidata/www/symfony/bin/TaskBatch.php >/dev/null 2>&1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php

use AppBundle\Task\ProcessorTask;

require __DIR__.'/../vendor/autoload.php';
if (PHP_VERSION_ID < 70000) {
include_once __DIR__.'/../var/bootstrap.php.cache';
}

$kernel = new AppKernel('prod', false);
if (PHP_VERSION_ID < 70000) {
$kernel->loadClassCache();
}

$kernel->boot();
$task = new ProcessorTask($kernel->getContainer());
$task->run();
阅读全文 »
1…8910…15
Mr

Mr

懒........

102 日志
21 分类
56 标签
RSS
Links
  • Novnan
  • 挨踢Blog
  • Eagle
  • Timber
  • 谢炳南
© 2020 — 2021 Mr
0%