-
Notifications
You must be signed in to change notification settings - Fork 2
/
server.php
121 lines (94 loc) · 2.26 KB
/
server.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
<?php
define('SITE_MODE', true);
require __DIR__ . '/boot.php';
$command = isset($argv[1]) ? $argv[1] : '';
switch ($command) {
case 'start':
__start();
break;
case 'stop':
__stop();
break;
case 'status':
__status();
break;
case 'reload':
__reload();
break;
default:
echo "usage: php -q server.php [start|stop|reload|status]\n";
exit(1);
}
exit(0);
////////////////////////////////////////////////////////////////////////////////
function __start()
{
if ($pid = __getpid()) {
echo sprintf("other server run at pid %d\n", $pid);
exit(1);
}
echo "server start\n";
$config = __getconfig();
$app = __get_swoole_app($config);
$app->start();
}
function __stop()
{
if (!$pid = __getpid()) {
echo "server not run\n";
exit(1);
}
posix_kill($pid, SIGTERM);
echo "server stoped\n";
}
function __status()
{
if ($pid = __getpid()) {
echo sprintf("server run at pid %d\n", $pid);
} else {
echo "server not run\n";
}
}
function __reload()
{
if (!$pid = __getpid()) {
echo "server not run\n";
exit(1);
}
posix_kill($pid, SIGUSR1);
echo "server reloaded\n";
}
function __getconfig()
{
static $config;
$add_path = function ($file) {
if (substr($file, 0, 1) === '/') {
return $file;
}
return ROOT_DIR . '/' . $file;
};
if (!$config) {
$config = parse_ini_file(ROOT_DIR . '/server.ini', true);
if (isset($config['server']['pid_file'])) {
$config['server']['pid_file'] = $add_path($config['server']['pid_file']);
}
if (isset($config['swoole_setting']['log_file'])) {
$config['swoole_setting']['log_file'] = $add_path($config['swoole_setting']['log_file']);
}
}
return $config;
}
function __getpid()
{
$config = __getconfig();
$pid_file = $config['server']['pid_file'];
$pid = file_exists($pid_file) ? file_get_contents($pid_file) : 0;
// 检查进程是否真正存在
if ($pid && !posix_kill($pid, 0)) {
$errno = posix_get_last_error();
if ($errno === 3) {
$pid = 0;
}
}
return $pid;
}