用man start-stop-daemon 这个程序用来启动和关闭系统级别的进程。
下面我用该命令启动我自己编译的nginx程序:
start-stop-daemon --start --quiet --pidfile /opt/nginx.pid --exec /home/chenshu/nginx/bin/nginx -- -c /home/chenshu/nginx/etc_nginx/nginx.conf
注意,这里都使用绝对路径,相对路径会有问题。
- --pidfile 指定了保存进程id的文件 /opt/nginx.pid
- --exec 指定了可执行程序
- -- 之后加上传递给nginx的参数 -c /home/chenshu/nginx/etc_nginx/nginx.conf
单独运行nginx的时候,还可以指定 -t参数用于测试-c 参数指定的配置文件是否正确。
由于我要将所有的nginx程序,日志,配置都放在/home/dist/carrier/nginx目录下,因此对应的修改启动脚本/etc/init.d/nginx
由于没有找到办法指定error log的位置. 因此现在绕过的方法是 编译nginx的时候使用--prefix=/home/dist/carrier/nginx参数。
这里用到了之前没有用的DAEMON_OPTS变量,传递-c参数。注意,必须用双引号。
- #!/bin/sh
- ### BEGIN INIT INFO
- # Provides: nginx
- # Required-Start: $local_fs $remote_fs $network $syslog
- # Required-Stop: $local_fs $remote_fs $network $syslog
- # Default-Start: 2 3 4 5
- # Default-Stop: 0 1 6
- # Short-Description: starts the nginx web server
- # Description: starts nginx using start-stop-daemon
- ### END INIT INFO
- PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
- CARRIER_HOME=/home/dist/carrier
- DAEMON=$CARRIER_HOME/nginx/bin/nginx
- PID_FILE=$CARRIER_HOME/nginx/nginx.pid
- CONFIG_FILE=$CARRIER_HOME/nginx/conf/nginx.conf
- DAEMON_OPTS="-c $CONFIG_FILE"
- NAME=nginx
- DESC=nginx
- # Include nginx defaults if available
- if [ -f /etc/default/nginx ]; then
- . /etc/default/nginx
- fi
- test -x $DAEMON || exit 0
- set -e
- . /lib/lsb/init-functions
- test_nginx_config() {
- if $DAEMON -t $DAEMON_OPTS >/dev/null 2>&1; then
- return 0
- else
- $DAEMON -t $DAEMON_OPTS
- return $?
- fi
- }
- case "$1" in
- start)
- echo -n "Starting $DESC: "
- test_nginx_config
- # Check if the ULIMIT is set in /etc/default/nginx
- if [ -n "$ULIMIT" ]; then
- # Set the ulimits
- ulimit $ULIMIT
- fi
- start-stop-daemon --start --quiet --pidfile $PID_FILE --exec $DAEMON -- $DAEMON_OPTS || true
- echo "$NAME."
- ;;
- stop)
- echo -n "Stopping $DESC: "
- start-stop-daemon --stop --quiet --pidfile $PID_FILE --exec $DAEMON || true
- echo "$NAME."
- ;;
- restart|force-reload)
- echo -n "Restarting $DESC: "
- start-stop-daemon --stop --quiet --pidfile $PID_FILE --exec $DAEMON || true
- sleep 1
- test_nginx_config
- # Check if the ULIMIT is set in /etc/default/nginx
- if [ -n "$ULIMIT" ]; then
- # Set the ulimits
- ulimit $ULIMIT
- fi
- start-stop-daemon --start --quiet --pidfile $PID_FILE --exec $DAEMON -- $DAEMON_OPTS || true
- echo "$NAME."
- ;;
- reload)
- echo -n "Reloading $DESC configuration: "
- test_nginx_config
- start-stop-daemon --stop --signal HUP --quiet --pidfile $PID_FILE --exec $DAEMON || true
- echo "$NAME."
- ;;
- configtest|testconfig)
- echo -n "Testing $DESC configuration: "
- if test_nginx_config; then
- echo "$NAME."
- else
- exit $?
- fi
- ;;
- status)
- status_of_proc -p $PID_FILE "$DAEMON" nginx && exit 0 || exit $?
- ;;
- *)
- echo "Usage: $NAME {start|stop|restart|reload|force-reload|status|configtest}" >&2
- exit 1
- ;;
- esac
- exit 0