由普通用户执行service redis-server 想到

如果普通用户执行
service redis-server status
即使redis-server 已经运行了还是显示以下内容
redis-server is not running
 
如果换成用root 用户或用sudo 执行
sudo service redis-server status
就能显示出正确的redis-server 状态了
redis-server is running
 
原来service 命令也是个shell 脚本
which service
/usr/sbin/service
 
查看service 的内容
vi $(which service)
 
可以看到SERVICEDIR="/etc/init.d",所以
service redis-server status
等同于
/etc/init.d/redis-server status
 
实际上,/etc/init.d/redis-server 也是个shell 脚本
vi /etc/init.d/redis-server
原来该脚本通过以下命令判断redis-server 是否存在
start-stop-daemon --stop --quiet --signal 0 --name ${NAME} --pidfile ${PIDFILE}
变量定义如下
NAME=redis-server
RUNDIR=/var/run/redis
PIDFILE=$RUNDIR/redis-server.pid
替换变量,去掉--quiet 参数后,分别用
普通用户执行
start-stop-daemon --stop --signal 0 --name redis-server --pidfile /var/run/redis/redis-server.pid
1 pids were not killed
No redis-server found running; none killed.
echo $?
1
 
用root 或sudo 执行
sudo start-stop-daemon --stop --signal 0 --name redis-server --pidfile /var/run/redis/redis-server.pid
echo $?
0
 
究其原因,还是权限问题,虽然信号0 表示什么也不做,但start-stop-daemon --stop 还是要去假装执行停止动作
但是如果你的权限不够,连假装的机会都没有,直接用普通用户执行kill -0 可以看到类似的效果
kill -0 $(cat /var/run/redis/redis-server.pid)
-bash: kill: (4180) - Operation not permitted
换成sudo 或root 执行
sudo kill -0 $(cat /var/run/redis/redis-server.pid)
/tmp$ echo $?
0
 
建议,以后执行service 命令时还是用sudo 或root 得到的结果才比较正确
 
 
ubuntu 14.04 安装redis
 
start-stop-daemon 命令
 
linux service 命令解析
 
Linux 使用KILL 0 检测进程是否存在
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值