-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathswoole.php
executable file
·179 lines (157 loc) · 4.88 KB
/
swoole.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
<?php
/**
* 开发程序时入口打开debug
* UserDomain: hanhyu
* Date: 18-10-11
* Time: 上午10:15
*/
function stop(): void
{
if (is_file(__DIR__ . '/log/swoolePid.log')) {
$masterPid = file_get_contents(__DIR__ . '/log/swoolePid.log');
//使用swoole_process::kill代替posix_kill
if (\Swoole\Process::kill($masterPid, 0)) {
\Swoole\Process::kill($masterPid);
$timeout = 60;
$startTime = time();
echo '=================== stop ===================' . PHP_EOL;
while (true) {
// Check the process status
if (\Swoole\Process::kill($masterPid, 0)) {
// 判断是否超时
if (time() - $startTime >= $timeout) {
echo PHP_EOL . '================= fail =================' . PHP_EOL;
return;
}
sleep(1);
echo '.';
continue;
}
echo PHP_EOL . '================== success =================' . PHP_EOL;
return;
}
}
}
echo '================= please start the first =================' . PHP_EOL;
return;
}
function reload(): void
{
if (is_file(__DIR__ . '/log/swoolePid.log')) {
$masterPid = file_get_contents(__DIR__ . '/log/swoolePid.log');
if (\Swoole\Process::kill($masterPid, 0)) {
\Swoole\Process::kill($masterPid, SIGUSR1);
echo '=================== reload ===================' . PHP_EOL;
sleep(1);
echo PHP_EOL . '================== success =================' . PHP_EOL;
return;
}
}
echo '================= please start the first =================' . PHP_EOL;
return;
}
function run(string $param = 'produce'): void
{
if ($param === 'dev') {
define('APP_DEBUG', TRUE);
} else {
define('APP_DEBUG', FALSE);
}
//使用error_reporting来定义哪些级别错误可以触发 -1
error_reporting(E_ALL);
if (APP_DEBUG) {
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
ini_set('log_errors', 1);
//'SWOOLE_LOG_DEBUG | SWOOLE_LOG_TRACE | SWOOLE_LOG_INFO | SWOOLE_LOG_NOTICE | SWOOLE_LOG_WARNING | SWOOLE_LOG_ERROR'
define('SWOOLE_LOG_LEVEL', 2);
} else {
ini_set('display_errors', 0);
ini_set('display_startup_errors', 0);
ini_set('log_errors', 1);
define('SWOOLE_LOG_LEVEL', 5);
}
//每个PHP进程所吃掉的最大内存
ini_set('memory_limit', '2048M');
ini_set('upload_max_filesize', '50M');
ini_set('max_input_time', '300');
ini_set('max_execution_time', '300');
date_default_timezone_set('Asia/Shanghai');
define('DS', DIRECTORY_SEPARATOR);
define('ROOT_PATH', __DIR__);
define('CONF_PATH', ROOT_PATH . DS . 'conf');
define('APP_PATH', ROOT_PATH . DS . 'application');
define('LIBRARY_PATH', APP_PATH . DS . 'library');
require APP_PATH . DS . 'Bootstrap.php';
$serverObj = Bootstrap::getInstance();
$serverObj->start();
}
function explain(): void
{
echo <<<EOT
Usage:
php swoole.php {command} [arguments ...] [options ...]
Commands:
start Start swoole server
stop Stop swoole server
reload Reload swoole (task)worker process
Start arguments:
dev Start debug
Start Options:
-d Start daemonize server
Eg:
[start]: docker-compose exec wlsh php swoole.php start
[start]: docker-compose exec wlsh php swoole.php start dev
[start]: docker-compose exec wlsh php swoole.php start dev -d
[stop|restart]: docker-compose exec wlsh php swoole.php stop
[reload]: docker-compose exec wlsh php swoole.php reload
EOT;
echo PHP_EOL;
}
function start(array &$argv): void
{
$daemonize = false;
$param = 'produce';
if (isset($argv[2])) {
if ($argv[2] == '-d') {
$daemonize = true;
} elseif ($argv[2] == 'dev') {
$param = 'dev';
} else {
explain();
return;
}
}
if (isset($argv[3]) and $argv[2] != '-d') {
if ($argv[3] == '-d') {
$daemonize = true;
} else {
explain();
return;
}
}
define('SWOOLE_DAEMONIZE', $daemonize);
run($param);
}
/**
* 判断输入的参数指令
*/
if (isset($argv[1])) {
$let = $argv;
switch ($argv[1]) {
case 'start':
start($argv);
break;
case 'stop':
stop();
break;
case 'reload':
reload();
break;
default:
explain();
break;
}
return;
}
explain();