接手管理某台ERP服务器的生产环境。主要配有LNMP环境,前两天发现,这些服务居然都没有配置自启动。
这完全不考虑服务器意外重启导致服务未能启动,从而引起长时间的服务中断么?
所以,今天就特地添加了自启动。
本来,添加自启动是很简单的。尤其是yum安装出来的服务。
CentOS 7
1 2
| systemctl enable nginx php-fpm
|
CentOS 5/6
1 2 3
| chkconfig nginx on chkconfig php-fpm on
|
然而,这台是自己下载的软件包,还是自己编译的不得而知。反正/etc/init.d/
完全没这两货的影子。
没有那就添加吧,两个bash脚本。
我从网上扒拉了两段自己修改了一下。代码如下:
nginx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| #!/bin/bash
PATH=/app/nginx DESC="nginx daemon" NAME=nginx DAEMON=$PATH/sbin/$NAME CONFIGFILE=$PATH/conf/$NAME.conf PIDFILE=$PATH/logs/$NAME.pid scriptNAME=/etc/init.d/$NAME set -e [ -x "$DAEMON" ] || exit 0 do_start() { $DAEMON -c $CONFIGFILE || echo -n "nginx already running" } do_stop() { $DAEMON -s stop || echo -n "nginx not running" } do_reload() { $DAEMON -s reload || echo -n "nginx can't reload" } case "$1" in start) echo -n "Starting $DESC: $NAME" do_start echo "." ;; stop) echo -n "Stopping $DESC: $NAME" do_stop echo "." ;; reload|graceful) echo -n "Reloading $DESC configuration..." do_reload echo "." ;; restart) echo -n "Restarting $DESC: $NAME" do_stop do_start echo "." ;; *) echo "Usage: $scriptNAME {start|stop|reload|restart}" >&2 exit 3 ;; esac exit 0
|
nginx 主程序一般自带了好多方法,比如好用的 stop、reload。所以nginx的代码显得比较简洁。
关于找nginx路径,一般其实用which nginx
或者 whereis nginx
就够了。
但是想补充一个更加可靠的。
- 先找到nginx的pid号,
ps -aux | grep nginx
- ll /proc/pid号
看到 exe 文件的链接路径就是我们要找的程序全路径了。
1 2 3 4 5 6 7 8
| $ ps -aux | grep nginx Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ root 1147 0.0 0.0 46328 2488 ? Ss Mar14 0:00 nginx: master process nginx root 3870 0.0 0.0 47280 3772 ? S Mar29 2:27 nginx: worker process
$ sudo ls -l /proc/1147/ | grep exe lrwxrwxrwx 1 root root 0 Mar 14 10:17 exe -> /app/nginx/sbin/nginx
|
php-fpm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
php_command=/app/php56/sbin/php-fpm php_config=/app/php56/etc/php-fpm.conf php_pid=/app/php56/var/run/php-fpm.pid RETVAL=0 prog="php-fpm"
php_fpm_start() { /app/php56/sbin/php-fpm }
start(){ if [ -e $php_pid ] then echo "php-fpm already start..." exit 1 fi php_fpm_start }
stop(){ if [ -e $php_pid ] then parent_pid=`cat $php_pid` all_pid=`ps -ef | grep php-fpm | awk '{if('$parent_pid' == $3){print $2}}'` for pid in $all_pid do kill $pid done kill $parent_pid fi exit 1 }
restart(){
kill -USR2 `cat /app/php56/var/run/php-fpm.pid` }
case "$1" in start) start ;; stop) stop ;; restart)
restart ;; status) status $prog RETVAL=$? ;; *) echo $"Usage: $prog {start|stop|restart|status}" exit 1 esac exit $RETVAL
|
这个代码就有点随意了,我做了少量修改,注意修改下执行程序的路径和PID文件的路径就行了,这里代码并没有用到配置文件路径其实。如果无法正确加载配置,可以把我加上的#-c /app/php56/lib/php.ini -y ${php_config}
这句代码注释去掉。
另外 php-fpm的配置路径在ps -aux | grep php-fpm
即可看到。记得修改,去掉pid路径的注释。
虽然代码在没找到pid文件的时候,会自己尝试提取pid,但是建议还是去掉注释。
添加服务,开启自启动
两个文件一个保存为 /etc/init.d/nginx
一个保存为 /etc/init.d/php-fpm
名字可以自己改,但是不推荐。
可以直接在 /etc/rc.local
修改吗
可以的。
比如
1 2 3
| /app/nginx/sbin/nginx -c /app/nginx/conf/nginx.conf /app/php56/sbin/php-fpm
|
为何不这样做,为了以后管理服务,比如重启方便一点。
参考资料