您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
workerman利用属性user实现指定用户运行进程
发布时间:2021-11-30 22:14:24编辑:雪饮阅读()
user
说明:
string Worker::$user
设置当前Worker实例以哪个用户运行。此属性只有当前用户为root时才能生效。不设置时默认以当前用户运行。
建议$user设置权限较低的用户,例如www-data、apache、nobody等。
注意:此属性必须在Worker::runAll();运行前设置才有效。
实例test.php:
<?php
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('websocket://0.0.0.0:8484');
// 设置实例的运行用户
$worker->user = 'xy';
$worker->onWorkerStart = function($worker)
{
echo "Worker starting...\n";
};
// 运行worker
Worker::runAll();
?>
实例运行:
[root@izj6c2jeancylo0ppo4vz5z workerman]# php test.php start
Workerman[test.php] start in DEBUG mode
------------------------------------------- WORKERMAN --------------------------------------------
Workerman version:4.0.22 PHP version:7.0.33
-------------------------------------------- WORKERS ---------------------------------------------
proto user worker listen processes status
tcp xy none websocket://0.0.0.0:8484 1 [OK]
--------------------------------------------------------------------------------------------------
Press Ctrl+C to stop. Start success.
Worker starting...
实例进程:
[root@izj6c2jeancylo0ppo4vz5z workerman]# top -u xy
top - 10:26:54 up 23:12, 3 users, load average: 0.02, 0.16, 0.23
Tasks: 119 total, 2 running, 117 sleeping, 0 stopped, 0 zombie
%Cpu(s): 4.7 us, 2.3 sy, 0.0 ni, 92.6 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1016396 total, 74952 free, 649456 used, 291988 buff/cache
KiB Swap: 1049596 total, 1049596 free, 0 used. 169796 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
19013 xy 20 0 210420 7124 2124 S 0.0 0.7 0:00.00 php
可以看到user字段为xy,进程id会比实际进程id多出一个数值单位
[root@izj6c2jeancylo0ppo4vz5z workerman]# cat _workerman_test.php.pid
19012
应该是因为这里是以php的子进程运行的原因。
不带user属性的实例:test.php:
<?php
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('websocket://0.0.0.0:8484');
$worker->onWorkerStart = function($worker)
{
echo "Worker starting...\n";
};
// 运行worker
Worker::runAll();
?>
实例运行:
[root@izj6c2jeancylo0ppo4vz5z workerman]# php test.php start
Workerman[test.php] start in DEBUG mode
------------------------------------------- WORKERMAN --------------------------------------------
Workerman version:4.0.22 PHP version:7.0.33
-------------------------------------------- WORKERS ---------------------------------------------
proto user worker listen processes status
tcp root none websocket://0.0.0.0:8484 1 [OK]
--------------------------------------------------------------------------------------------------
Press Ctrl+C to stop. Start success.
Worker starting...
这里已经看到进程运行用户user是root,我当前登录的linux用户也是root
再来验证下:
[root@izj6c2jeancylo0ppo4vz5z workerman]# ps -ef | grep "php\|UID"
UID PID PPID C STIME TTY TIME CMD
root 929 1 0 Nov29 ? 00:00:02 php-fpm: master process (/www/server/php/70/etc/php-fpm.conf)
root 934 1 0 Nov29 ? 00:00:02 php-fpm: master process (/www/server/php/56/etc/php-fpm.conf)
www 942 934 0 Nov29 ? 00:00:05 php-fpm: pool www
www 943 934 0 Nov29 ? 00:00:04 php-fpm: pool www
www 944 934 0 Nov29 ? 00:00:05 php-fpm: pool www
www 947 929 0 Nov29 ? 00:00:00 php-fpm: pool www
www 948 929 0 Nov29 ? 00:00:00 php-fpm: pool www
www 949 929 0 Nov29 ? 00:00:00 php-fpm: pool www
www 950 929 0 Nov29 ? 00:00:00 php-fpm: pool www
www 951 929 0 Nov29 ? 00:00:00 php-fpm: pool www
www 954 934 0 Nov29 ? 00:00:04 php-fpm: pool www
www 955 934 0 Nov29 ? 00:00:04 php-fpm: pool www
root 960 1 0 Nov29 ? 00:00:01 php-fpm: master process (/www/server/php/72/etc/php-fpm.conf)
www 979 960 0 Nov29 ? 00:00:00 php-fpm: pool www
www 980 960 0 Nov29 ? 00:00:00 php-fpm: pool www
www 981 960 0 Nov29 ? 00:00:00 php-fpm: pool www
www 982 960 0 Nov29 ? 00:00:00 php-fpm: pool www
www 986 960 0 Nov29 ? 00:00:00 php-fpm: pool www
root 2949 1 0 Nov29 ? 00:00:02 php-fpm: master process (/www/server/php/74/etc/php-fpm.conf)
www 2954 2949 0 Nov29 ? 00:00:00 php-fpm: pool www
www 2955 2949 0 Nov29 ? 00:00:00 php-fpm: pool www
www 2956 2949 0 Nov29 ? 00:00:00 php-fpm: pool www
www 2957 2949 0 Nov29 ? 00:00:00 php-fpm: pool www
www 2958 2949 0 Nov29 ? 00:00:00 php-fpm: pool www
www 5714 934 0 Nov29 ? 00:00:05 php-fpm: pool www
root 21233 20028 0 10:29 pts/0 00:00:00 WorkerMan: master process start_file=/workerman/test.php
root 23553 18510 0 10:34 pts/1 00:00:00 grep --color=auto php\|UID
这里倒数第二个就是我们的进程,可以看到运行身份是root
注意:
用到的ps的参数:
-e 此参数的效果和指定"A"参数相同。
-a 显示所有终端机下执行的进程,除了阶段作业领导者之外。
f 用ASCII字符显示树状结构,表达进程间的相互关系。
关键字词:workerman,user,指定用户