nginx启动文件报grep错和 useradd错的问题处理

原创 2016年08月31日 10:07:16

场景

最近某客户有个要求,所有部署的不准运行在root下面,安装在/home/somebody下面(用户家目录),当对nginx进行普通用户运行的时候,会遇到各种各样的问题,比如文件路径不存在呀,权限不够呀等。

本文就是在修改nginx运行在家目录的时候遇到的最后一个问题,提示 useradd没有权限,以及运行的时候出现的异常现象。

$ ./nginx restart
ngx_http_fastdfs_set pid=5550
nginx: the configuration file /home/123/opt/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /home/123/opt/nginx/conf/nginx.conf test is successful
Stopping nginx:                                            [  OK  ]
grep: unrecognized option '--prefix=/home/123/opt/nginx'
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.
./nginx: line 34: /usr/sbin/useradd: Permission denied
Starting nginx: ngx_http_fastdfs_set pid=5582
                                                           [  OK  ]
touch: cannot touch `/home/123/opt/var/lock/subsys/nginx': No such file or directory

调查

  • 定位代码到如下函数
make_dirs() {
   # make required directories
   user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\
1/g' -`
   if [ -z "`grep $user /etc/passwd`" ]; then
       useradd -M -s /bin/nologin $user
   fi
   options=`$nginx -V 2>&1 | grep 'configure arguments:'`
   for opt in $options; do
       if [ `echo $opt | grep '.*-temp-path'` ]; then
           value=`echo $opt | cut -d "=" -f 2`
           if [ ! -d "$value" ]; then
               # echo "creating" $value
               mkdir -p $value && chown -R $user $value
           fi
       fi
   done
}

start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    make_dirs //调用函数
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}
可以看出,make_dirs会完成两个作用,一个是判断编译的时候的--user,如果系统中没有这个账户,那么就新建这个账户;另外一个是从options中提取temp-path变量,并创建该目录。对于我们当前的需求是不需要的,账户已经创建好了,temp-path没有,所以可以在start函数中,直接注释掉对make_dirs的调用。
版权声明:更多精彩请关注 http://book.opschina.org, 或者加入QQ新群648503385,或者直接加微信:zzlyzq, 让天下没有难做的运维。

nginx中文手册内容说明

1.什么是nginx? Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性: 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多...
  • u012151556
  • u012151556
  • 2015年03月03日 21:51
  • 940

mysql2503、2502错误无法安装 以及安装后找不到服务的解决办法

在cmd下输入msiexec/package "mysql安装路径" 即可运行安装 如果你安装的路径不是默认路径的话,Windows是找不到MySql服务的 因此无法配置 即服务找不到无法开...
  • youhongyan
  • youhongyan
  • 2017年03月07日 16:51
  • 262

TomCat启动后报:java.io.EOFException错误

java.io.EOFException     at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.j...
  • leidijava
  • leidijava
  • 2012年09月13日 10:58
  • 4307

调试web程序时,遇到服务器500错误,怎么办?

对于web开发者,当程序发到外网(或预发布)情况下,服务器默认设置是不会报错的(错误详情报不出来),此时,若遇到一个请求,报服务器500错误,怎么排查原因呢?我曾经是代码一行一行追踪,先echo 然后...
  • xushengbin888
  • xushengbin888
  • 2013年11月06日 16:59
  • 1153

错错错,~哗啦啦,错错错

org/apache/commons/collections/CursorableLinkedList
  • NF160
  • NF160
  • 2014年04月28日 23:40
  • 366

HTTP错误汇总(404、302、200……)今天web报302错误,刷新后再试没问题,找度娘问问,顺便记点东西

HTTP 400 - 请求无效 HTTP 401.1 - 未授权:登录失败 HTTP 401.2 - 未授权:服务器配置问题导致登录失败 HTTP 401.3 - ACL 禁止访问资源 HTTP 40...
  • zhangjianxp01
  • zhangjianxp01
  • 2017年12月11日 20:37
  • 111

JavaScript学习总结一

作用: 进行相对简单的操作 展示的更好 主动调用服务器的代码 1.提供客户端验证 用户名.密码.验证码。客户端可以进行简单验证 2.诸如判断用户是否存在的例子主动调用服务器的代码 JS起关键...
  • wangyihero8
  • wangyihero8
  • 2012年12月22日 16:56
  • 300

mysql-connector6.0.6 jdbc及dataSource学习

最近在研究springmvc4.3.10+mybatis3.4.4在配置的dataSource的时候老是报错,顺手整理一下遇见的几个错; 1,java.sql.SQLNonTransientConne...
  • ixiaoyou
  • ixiaoyou
  • 2017年08月30日 16:49
  • 175

mysql 连接超时问题报错解决方案

报错: ** END NESTED EXCEPTION ** Last packet sent to the server was 0 ms ago. STACKTRACE: co...
  • yh1213712
  • yh1213712
  • 2016年09月22日 09:05
  • 163

opencv 数字图像处理-图像错切

图像的错切变换实际上是平面景物在投影平面上的非垂直投影效果。图像错切变换也称为图像剪切、错位或错移变换。图像错切的原理就是保持图像上各点的某一坐标不变,将另一个坐标进行线性变换,坐标不变的轴称为依赖轴...
  • u012005313
  • u012005313
  • 2015年06月28日 21:29
  • 1565
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:nginx启动文件报grep错和 useradd错的问题处理
举报原因:
原因补充:

(最多只允许输入30个字)