接手管理某台ERP服务器的生产环境。主要配有LNMP环境,前两天发现,这些服务居然都没有配置自启动。
这完全不考虑服务器意外重启导致服务未能启动,从而引起长时间的服务中断么?
所以,今天就特地添加了自启动。
本来,添加自启动是很简单的。尤其是yum安装出来的服务。
CentOS 7
| 12
 
 | systemctl enable nginx php-fpm
 
 | 
CentOS 5/6
| 12
 3
 
 | chkconfig nginx onchkconfig php-fpm on
 
 
 | 
然而,这台是自己下载的软件包,还是自己编译的不得而知。反正/etc/init.d/ 完全没这两货的影子。
没有那就添加吧,两个bash脚本。
我从网上扒拉了两段自己修改了一下。代码如下:
nginx
| 12
 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 文件的链接路径就是我们要找的程序全路径了。
| 12
 3
 4
 5
 6
 7
 8
 
 | $ ps -aux | grep nginxWarning: 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
| 12
 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 修改吗
可以的。
比如
| 12
 3
 
 | /app/nginx/sbin/nginx -c /app/nginx/conf/nginx.conf/app/php56/sbin/php-fpm
 
 
 | 
为何不这样做,为了以后管理服务,比如重启方便一点。
参考资料
      