1. 为啥需要指定用户呢
因为想用PHP代码控制脚本的‘开始’和‘重启’,如果不指定,默认是用当前用户运行的,比如在终端直接输入
php ./websockt.php
,当前登录的是root用户的话,默认就是以root在执行。
当我们想用PHP代码结束这个进程的时候,由于web服务器的用户多半不会是root,一般是www之类的,那PHP代码就没有权限kill掉这个进程,则无法实现用代码重启的功能!
2. 如何指定
用sudo命令,所以这需要超级权限,比如root用户才能用。
sudo -u www php ./websocket.php
,这样子就是用www运行的这个程序,在PHP中就可以用exec('kill -9 123456')
去杀死这个进程了!
3. 贴个完整的实例
#! /bin/bash
PIDS=`ps -ef | grep "pige.site/public/index.php api/index/task" | grep -v grep | awk '{print $2}'`
USER=`whoami | awk '{print $1}'`
if [ "$PIDS" != "" ]
then
kill -9 $PIDS
echo 'restart'
else
echo 'start'
fi
if [ "$USER" == "root" ]
then
sudo -u www php /www/wwwroot/pige.site/public/index.php api/index/task &
else
#‘2>/dev/null >/dev/null &’是为了让PHP的exec()在后台执行
php /www/wwwroot/pige.site/public/index.php api/index/task 2>/dev/null >/dev/null &
fi