
环境说明
手头有一台linux的测试服务器,最近因为业务需要,需要通过php访问另一台服务器去执行某些命令。
由于另一台服务器已经对这台服务器开了私钥,所以在终端上是可以直接执行命令而不需要输入密码的。
问题
PHP无法使用exec命令,没有任何返回值。
解决途径
1.php.ini的配置有问题。
由于php是7.0以上的版本,取消了安全模式,所以考虑PHP.ini文件配置。
打开php配置文件,里面有一行disabel_function的值,此处记录了禁止运行的函数,在里面讲exec和shell_exec,system等函数删除。
2.权限问题
修改以后PHP可以运行部分命令了,但是部分外部程序和命令仍然不能运行。使用sudo返回失败。
于是运行“whoami”查看,环境下php-frm的运行角色是www。
于是修改sudoers文件。
vi /etc/sudoers
将www添加到
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
下面:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
www ALL=(ALL) NOPASSWD:ALL
然后找到Default requiretty这一行,把他注释掉
# Default requiretty
ps:意思就是sudo默认需要tty终端,注释掉就可以在后台执行了.
重启nginx和php-fpm
service nginx restart
service php-fpm restart
这样,PHP就可以在需要执行外部命令的时候使用sudo利用root身份执行命令,而不会报错或者执行失败了!
Thisis
for
a
system
with
little
memory
(32M
-
64M)
where
MySQL
playsan
important
part,
or
systems
up
to
128M
where
MySQL
is
used
together
withother
programs
(such
as
a
web
server)
cp
/usr/share/mysql/my-medium.cnf
/etc/my.cnf
每个php-fpm占用20M左右的内存,
max_children默认5个,子进程太多反而会增加master
process调度的负担,而且CPU进行过多的上下文切换也会浪费系统资源,得不偿失,所以按
php-fpm.conf
默认配置就好:
pm
=
dynamic
pm.max_children
=
5
pm.start_servers
=
2
pm.min_spare_servers
=
1
pm.max_spare_servers
=
3
php-fpm很像httpd用prefork那样运行,开始时fork出2个进程,根据请求数的增多自动fork多更多的子进程,配置里默认最多是5个。如果你的CPU多核,很强劲,
max_children
也可以设大点,比如可以设10个,要注意的是,即使内存够大,
max_children也不要弄太多,CPU得跟得上才行。
至于nginx.conf,默认值就好,默认是1个工作进程,单个工作进程最大并发1024。
worker_processes
1
worker_connections
1024
别看Nginx默认才一个工作进程(里面包含一个主线程),这并不妨碍Nginx高效。
httpd
prefork那一堆工作进程,静态和动态请求都一样占用线程,性能真没Nginx好。
对于多核CPU,Nginx还可以配置绑定
核芯,充分利用多核CPU。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)