王志勇 发表于 2019年09月18日 09:56
想办法尝试了一下,尝试用find命令,即:find /etc -name 'fpm'
在Ubuntu 12、16下测试,只显示一行,如:
Ubuntu 16显示:/etc/php/7.4/fpm
Ubuntu 12显示:/etc/php5/fpm
如果所有的Ubuntu/Debian系统都只显示这一行,就好办了。让Shell程序将显示结果最前面的“/etc/”字符删除掉,后面的 php/7.4/fpm 第一个/删除,第2个/替换为-,得到php7.4-fpm。/etc/php5/fpm,则只替换/为-,得到php5-fpm。
php7.4-fpm和php5-fpm就是需要得到的服务名。
PHP官方公司的开发者,应该把Ubuntu/Debian系统的fpm服务名,都统一为php-fpm,就省很多麻烦。
Nginx的PHP服务进程名:
Ubuntu 14下是php5-fpm
CentOS 6下是php-fpm
Ubuntu 16,自带的PHP软件源的进程是php7.0-fpm
PPA+PHP的fpm进程名:
PHP 7.4: php7.4-fpm
PHP 7.4: php7.3-fpm
PHP 5.6: php5.6-fpm
等等。是不是真的够折腾的?就是因为fpm的名称不同,我在开发一键Shell命令中,还需要将所有的系统,所有的PHP版本都重新测试一遍。
2019-09-18 10:37更新:
刚测试了一下让Ubuntu 16同时安装PHP 7.4和PHP 5.6,然后用 find /etc -name 'fpm' 的命令,结果如:
/etc/php/7.4/fpm
/etc/php/5.6/fpm
所以这个命令只能让其运行一个PHP,只取第一个。Shell程序分享:
a1=`find /etc -name 'fpm'`; a2=(${a1// /}); echo ${a2[0]};
其中,a1变量的反引号会把回行符自动转成空格,a2=(${a1// /});表示把空格变成数组,${a2[0]}获取数组第一个值,就是/etc/php/7.4/fpm。
2019-09-18 10:53更新:更完美的解决、折腾方案
为了防止由于find命令会搜索所有的子目录,应该尽量缩小搜索范围,所以原搜索命令改为:
find /etc/php* -name 'fpm'
然后用a3=`ps -ef | grep 'fpm'`;来筛选出已有的fpm进程的名称。
将上述搜索结果进行遍历数组,如果数组中某个值包含在a3=`ps -ef | grep 'fpm'`当中,则这个值一定就是此时运行的PHP的fpm版本。
假如此时ps -ef当中没有fpm进程怎么办?只好按照上述的办法,只取数组中的第一个。
所以,避免PHP版本冲突的办法,用户的系统里最好只装一个PHP,其余版本全部不要装、或卸载。
2019-09-18 11:14更新:
上述提到的遍历 find /etc/php* -name 'fpm' 的结果的数组的Shell程序分享:
a1=`find /etc/php* -name 'fpm'`;
b1=(${a1// /}); for a2 in ${b1[@]}; do echo $a2; done;
上述程序的$a2就是所有的fpm的目录。
2019-09-18 11:27更新:
上述的解决办法,已经刚编写完成程序,Shell程序分享:
a4='';
a3=`ps -ef | grep 'fpm'`;
a1=`find /etc/php* -name 'fpm'`;
b1=(${a1// /});
a5=${b1[0]};
for a2 in ${b1[@]}; do if [[ $a3 =~ $a2 ]]; then a4=$a2; fi; done;
if [ "$a4"x = ''x ]; then a4=$a5; fi;
…… (还少了一步把/etc/php/7.3/fpm转成php7.3-fpm,未写完)
if [ "$a4"x != ''x ]; then service $a4 restart; fi;
说明:a4这个值,就是代表的fpm进程名,
b1=(${a1// /}); 这一行表示把空格变成数组,
if [ "$a4"x = ''x ]; then a4=$a5; fi; 这一行表示,如果ps -ef进程里没有fpm,则取find结果里的第一个fpm目录的名称,然后自动重启fpm。
2019-09-18 11:45更新:
把/etc/php/7.4/fpm转成php7.4-fpm,/etc/php5/fpm转成php5-fpm是这样想办法的,Shell程序分享:
a4='/etc/php/7.4/fpm';
a4=${a4//\/etc\//};
a4=${a4//\/fpm/};
a4=${a4//\//}'-fpm';
echo $a4;
说明:
第2行 a4=${a4//\/etc\//}; 首先把 /etc/ 字符删除,变成:
php/7.4/fpm
php5/fpm
第3行 a4=${a4//\/fpm/}; 把最后的字符 /fpm 删除,变成:
php/7.4
php5
第4行 ${a4//\//} 表示把 / 删除,变成:
php7.4
php5
第4行最后再添加'-fpm'的字符,即a4=${a4//\//}'-fpm';,变成:
php7.4-fpm
php5-fpm
最后就把/etc/php/7.4/fpm转成php7.4-fpm,/etc/php5/fpm转成php5-fpm。初看起来好像有点麻烦,经过这样解题,是不是变得思路清晰、简单了很多呢?
所以,把上述程序添加到最后一步重启fpm里,成品Shell程序为:
if [ "$a4"x != ''x ]; then a4=${a4//\/etc\//}; a4=${a4//\/fpm/}; a4=${a4//\//}'-fpm';
service $a4 restart;
fi;
完整的LNMP环境自动识别fpm进程名,并重启fpm最终的成品Shell程序是:
a4='';
a3=`ps -ef | grep 'fpm'`;
a1=`find /etc/php* -name 'fpm'`;
b1=(${a1// /});
a5=${b1[0]};
for a2 in ${b1[@]}; do if [[ $a3 =~ $a2 ]]; then a4=$a2; fi; done;
if [ "$a4"x = ''x ]; then a4=$a5; fi;
if [ "$a4"x != ''x ]; then a4=${a4//\/etc\//}; a4=${a4//\/fpm/}; a4=${a4//\//}'-fpm';
service $a4 restart;
fi;
置顶的文章:
论朋友圈可以发什么?
短信验证开发的方案分享
巡回更新:2018-09-21
速度是永恒的主题
UTF-8、HTTPS原来都是浮云
https安全吗?
独立博客有必要安装https吗?
近期的主题:
夜晚靓歌(10):你没看过的《星雨心愿》
Feedval、Blogval将下线/谈理财和生存
2024.9感言
人生讨论(20):有人借钱怎么办?(2)
人生讨论(19):迄今为止最强的情感频道
数码评测(67):让小米/红米手机的反应提高1~2倍
数码评测(66):无线网卡FW150UH VS FW150UH
数码评测(65):如何快速自制CPU天梯图?
数码评测(64):2024年,你还在用VGA线吗?
人生讨论(18):6年就可以实现财务自由
人生讨论(17):为什么总是受欺负?
人生讨论(16):要钱的最新妙招
创业杂谈(17):什么项目能赢利?
人生讨论(15):有人借钱怎么办?
数码评测(63):高清切换超级神器
数码评测(62):再谈视频的尺寸
数码评测(61):近期数码采购和折腾
人生讨论(14):看穿尊重
数码评测(60):图拉丁-最佳中配工作“免费”手机
创业杂谈(16):博客何时终结?
版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。
与此相关的链接
自由勇专栏
Blog存档 Archives
2022年07月
2022年06月(15)
2022年05月(20)
2022年04月(16)
2022年03月(9)
2022年02月(9)
2022年01月(10)
2021年 +