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, 让天下没有难做的运维。

启动Nginx报[10013]错误的解决方案

报错情景今天自己再本地配置好Nginx,但是启动时报了[10013]的错误,上网查了下,原因是80端口被占用了。错误提示如下图: 随后在cmd中输入下列命令(如图示)查看了一下80端口的占用情况:...

Nginx报错及其解决方法

原文地址:http://zhengdl126.iteye.com/blog/1066304 -------------------[warn] conflicting server name "...

windows下nginx无法启动

2012/04/02 13:55:59 [emerg] 7864#2376: bind() to 0.0.0.0:80 failed (10013: An attempt was made to ac...

Nginx 安装与配置

系统:Centos 6.0 下载nginx(nginx-1.2.4.tar.g)   http://nginx.org/ 下载pcre(pcre-8.31.tar.gz)    http://pc...
  • zgl_dm
  • zgl_dm
  • 2012年11月09日 16:53
  • 31079

nginx安装的一些问题

安装nginx本觉得很容易的事,结果把我整惨了,一开始按照提示的错误,q去下载了各种依赖包,包括zlib-1.2.4 ,openssl-0.9.8,pcre等,并手动编译,安装。。。 进入Nin...

grep命令最常用的功能总结

1. grep最简单的使用方法,匹配一个词:grep word filename 2. 可以从多个文件中匹配:grep word filename1 filenam2 filename3 3. 可以使...

Linux(CentOS)下设置nginx开机自动启动和chkconfig管理

Nginx 是一个很强大的高性能Web和反向代理服务器。虽然使用命令行可以对nginx进行各种操作,比如启动等,但是还是根据不太方便。下面介绍在linux下安装后,如何设置开机自启动。 首先,在li...

grep一个文件时,报错“Binary file ... matches”

问题:grep一个文件时,报错“Binary file ... matches” 使用命令 more时,内容可以正常看到 原因:文件为binary文件 解决:strings vers.l...

linux 增加用户 useradd 用法小结及配置文件说明 .

在Linux 系统中,所有的用户和组像一个国家。如果国家要繁荣昌盛的话,需要治理得当,需要有主席或者总统,以及地方官员和老百姓组成。在linux 中如果你对安全需求比较苛刻,完全可以限制用户的各种行为...

【unix学习】文件处理3—正则表达式和grep命令

unix文件处理—正则表达式和grep命令unix文件处理正则表达式和grep命令 正则表达式 grep命令 Purpose format Options 格式 实例 grep和正则表达式正则表达式 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:nginx启动文件报grep错和 useradd错的问题处理
举报原因:
原因补充:

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