在ubuntu上编译nginx成功后,通过sudo systemctl start ngin启动服务时报Failed to start nginx.service: Unit nginx.service not found.本篇记录解决方法。
解决办法
1. 在/etc/init.d/目录下新建文件,文件名为nginx
scott@ubuntu1804:~$ cd /etc/init.d
scott@ubuntu1804:/etc/init.d$ sudo vim nginx
输入以下内容:
#!/bin/sh
# nginx - this script starts and stops the nginx daemin
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /usr/local/nginx/conf/nginx.conf
# pidfile: /usr/local/nginx/logs/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
lockfile=/var/lock/subsys/nginx
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac
保存,退出
2.修改nginx权限为可执行
sudo chmod 755 /etc/init.d/nginx
现在的nginx为可读可写可执行权限了。
3.把nginx服务添加到 chkconfig 管理。
scott@ubuntu1804:/etc/init.d$ sudo chkconfig --add nginx
sudo: chkconfig: command not found
没有这个命令,安装这个命令
ubuntu上装不了这个命令
启动nginx服务
sudo service nginx start
这种方式启动不了nginx服务
使用systemctl查看一下
重新加载
scott@ubuntu1804:/etc/init.d$ sudo systemctl daemon-reload
查看/etc/rc.d/init.d/function文件
/etc/init.d目录下没有rc.d目录
/etc/rc.d/init.d/functions是CentOS的位置,Ubuntu对应:/lib/lsb/init-functions
修改脚本
修改保存,再次启动
/etc/init.d/nginx: 18: .: Can't open /etc/sysconfig/network 没有/etc/sysconfig目录
========================================================
看来这种方式行不通,换种方式
在/etc/systemd/system/下创建nginx.service文件,内容为
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
[Install]
WantedBy=multi-user.target
sudo chmod 777 nginx.service
启动nginx
scott@ubuntu1804:~$ sudo systemctl start nginx
10月 02 16:24:19 ubuntu1804 systemd[1]: Starting nginx.service...
10月 02 16:24:19 ubuntu1804 nginx[4996]: nginx: [emerg] getpwnam("www") failed
原因是在confige的时候加了参数--user=www \
--group=www \
添加www用户和组
scott@ubuntu1804:~$ sudo groupadd -f www
[sudo] password for scott:
scott@ubuntu1804:~$ sudo useradd -g www www
scott@ubuntu1804:~$ sudo systemctl start nginx
查看服务状态
说明nginx服务已经起来了。
在浏览器中输入http://127.0.0.1/
参考:
Ubuntu 16.04出现Can't open /etc/rc.d/init.d/functions的问题解决 - EasonJim - 博客园
sudo /etc/init.d/keepalived start 提示:Can't open /etc/rc.d/init.d/functions-优快云博客