以前、CentOS7.7にphp5.3を入れるという案件がありましたが、yumなどでは入らないため、phpenvで入れました。
が、起動スクリプトを配置していないことに今更築き、こちらをセットすることに。
起動スクリプトの配置
結論から言いますと、phpenvのなかにスクリプトがあるのでこれを配置すればOKです。(これに気づくのに少し時間がかかりました。)
任意のスクリプトを自分で作っても当然OKです。
一般的に起動スクリプトは /etc/init.d 配下か /usr/lib/systemd/system 配下にスクリプトをおきます。CentOS6までは前者で、7からは後者になります。
ただCentOS7でも/etc/init.dにおけばsystemに組み込まれるようです。
/etc/init.d
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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
#! /bin/sh ### BEGIN INIT INFO # Provides: php-fpm # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts php-fpm # Description: starts the PHP FastCGI Process Manager daemon ### END INIT INFO prefix=/root/.phpenv/versions/5.3.3 exec_prefix=${prefix} php_fpm_BIN=${exec_prefix}/sbin/php-fpm php_fpm_CONF=${prefix}/etc/php-fpm.conf php_fpm_PID=${prefix}/var/run/php-fpm.pid php_opts="--fpm-config $php_fpm_CONF" wait_for_pid () { try=0 while test $try -lt 35 ; do case "$1" in 'created') if [ -f "$2" ] ; then try='' break fi ;; 'removed') if [ ! -f "$2" ] ; then try='' break fi ;; esac echo -n . try=`expr $try + 1` sleep 1 done } case "$1" in start) echo -n "Starting php-fpm " $php_fpm_BIN $php_opts if [ "$?" != 0 ] ; then echo " failed" exit 1 fi wait_for_pid created $php_fpm_PID if [ -n "$try" ] ; then echo " failed" exit 1 else echo " done" fi ;; stop) echo -n "Gracefully shutting down php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -QUIT `cat $php_fpm_PID` wait_for_pid removed $php_fpm_PID if [ -n "$try" ] ; then echo " failed. Use force-exit" exit 1 else echo " done" fi ;; force-quit) echo -n "Terminating php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -TERM `cat $php_fpm_PID` wait_for_pid removed $php_fpm_PID if [ -n "$try" ] ; then echo " failed" exit 1 else echo " done" fi ;; restart) $0 stop $0 start ;; reload) echo -n "Reload service php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -USR2 `cat $php_fpm_PID` echo " done" ;; *) echo "Usage: $0 {start|stop|force-quit|restart|reload}" exit 1 ;; esac |
こちらシェルスクリプトが書いてあるものになりますが、大事な要素としては下記3つの
- 実行ファイル
- 設定ファイル
- プロセスファイル
ですかね。
1 2 3 |
php_fpm_BIN=${exec_prefix}/sbin/php-fpm php_fpm_CONF=${prefix}/etc/php-fpm.conf php_fpm_PID=${prefix}/var/run/php-fpm.pid |
この部分でパスを決めています。
勉強のためには自力で書くのがいいのですが、phpenvのなかに普通にありましたね・・・
1 |
cp -ipr ~/.phpenv/versions/5.3.3/etc/init.d/php-fpm /etc/init.d/ |
で、配置し、通常通り下記コマンドで起動、自動設定、確認をすればOKです。
1 2 3 4 |
service php-fpm start chkconfig php-fpm on #確認 chkconfig --list |
el7+phpenv+nginx(php-fpm)で開発環境を作り直した話 その2
/usr/lib/systemd/system
CentOS7以降はこちらです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[Unit] Description = php-fpm service [Service] PIDFile = プロセスファイルのフルパス ExecStart = phpenvのバイナリファイル --fpm-config 設定ファイル #自動的に再起動させる場合はalways Restart = always #simpleで良さげ Type = simple [Install] WantedBy = multi-user.target |
下記スクリプトを/usr/lib/systemd/system配下におき、
systemctl list-unit-files --type=service | grep php-fpm
でphp-fpmが表示されればOKです。