phpshell脚本
A. linux 下写 shell kill掉运行时间超过5分钟的php进程
可以的,能根据Cpu累积耗时杀掉程序。
相关进程名字要知道哈。
假设以php进程为名字。
p_name=php
while true
do
sleep 3
#每3秒检查一次。
pro="$(ps -A|grep "$p_name"|head -n1)"
time="$(echo $pro|awk '{
split($3,tab,/:/); if (tab[2]+tab[1]*60>=5) {print 1}else{print 0}
}')"
#上面那句利用awk判断时间是不是大于5分钟。是则输出1,否则输出0.
pid="$(echo $pro|awk '{print $1}')"
#如果为1 就杀掉那个进程。
if [ $time = '1' ]
kill -9 $pid
fi
done
B. 脚本分几种,用途都是什么
脚本语言有很多种,比如VBScript / JavaScript等,完成的功能也有很多。至于怎么写脚本,每个脚本都有自己的语言规范,按照语言规范来写吧,一般脚本都是纯文本格式,所以使用系统自带的笔记本软件就可以完成这项工作。
C. shell脚本做文本解析同php和python比哪个效率更高
shell的效率最差,因为本身shell没有文本解析的功能,多数情况下还是通过调用perl、sed等工具实现的,调用这些工具本质上是执行了外部程序,不断的执行程序,所以效率很差。
而php、perl等都只一个进程就完成所有的处理操作。
D. php怎样多线程操作
其实就PHP而言,可以用2种方式来做:
(1)在PHP里使用shell_exec的函数,以shell的方式,启动一个独立的PHP脚本执行。这种方式,其实相当于在Web服务器处理过程中,独立起了一个shell进程处理你的任务。这里,需要特别注意的是shell_exec的服务器安全,注意校验参数,小心避免被带入shell命令中。这个是比较容易实现的方式。
(2)使用PHP实现一个Server,监听一个端口,为Web端提供服务。这里的实现方式有很多,通常要配合扩展,例如原生的pthread(多线程),开源扩展swoole等等。
E. 在终端中直接运行指令与放在脚本中运行指令, 运行结果不一样
ls -l `which sh`
sh --version
看看输出是什么
估计和你当前用的 shell 命令行不是同一个 shell 解释器。
写 shell 脚本,记住一定要在最开始写 #!/bin/bash 或者其他的解释器,比如 csh、tsh。python、perl、php 都可以这么用,这样你的脚本就制定了一个解释器来运行。运行时不要用 sh xxx.sh ,而是赋予可运行权限后 ./xxxx.sh 方式运行。
一般 Linux 下面的 /bin/sh 是一个链接,指向一个默认的 shell 解释器,这个链接如果不是你需要的解释器,那么脚本运行出现任何问题都可能。如果系统装了 busybox ,他也会提供一个 sh 解释器,而且命令的文件名也是 sh ,他和 bash 运行结果也有区别,只是这个 sh 不一定在 /bin 里面。
F. shell脚本编程之expect
Shell脚本编程中的重要工具——expect
expect是基于Tcl语言开发的自动化工具,专为处理交互式操作而设计。它能够将诸如SSH登录、FTP操作等交互过程编程化,极大地提升在多台服务器上执行重复任务的效率。尤其在系统管理中,expect脚本的使用能简化繁琐的操作流程。
expect的核心在于其命令结构,包括单分支和多分支语法。单分支允许基于特定模式执行相应的动作,而多分支则根据多个条件灵活处理。对于进阶开发者而言,理解并掌握这些语法是关键。
实战中,expect的应用范围广泛,例如通过spawn启动新进程,interact允许用户交互,以及管理变量、处理位置参数和登录后执行多个命令。甚至可以编写shell脚本调用expect,以实现批量用户在集群中的创建等复杂任务。
想要获取更多PHP进阶资料,如大厂面试题集、PHP框架、微服务架构、分布式架构和高并发场景的专业内容,可以通过关注公众号“PHP开源社区”,或访问相关资源链接,获取2021年的面试真题精选和多年技术精华整理合集。
G. 如何让php执行shell
php给我们提供了system(),exec(),passthru()这三个函数来调用外部的命令.
虽然这三个命令都能执行linux系统的shell命令,但是其实他们是有区别的:
system() 输出并返回最后一行shell结果。
exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。
passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。
相同点:都可以获得命令执行的状态码
例子:system("/usr/local/bin/webalizer/webalizer");
H. 利用shell脚本自动重启php服务
首先你要设置好sudo 如果不用sudo用root用户执行也可以
写脚本很简单的
下述两行拷贝到服务器的文本文件中
#!/bin/ksh
/data/webserver/php-5.2.17/sbin/php-fpm reload
如果没有依赖库或依赖环境变量,任何用户只要有执行权限就可以执行。
sudo可以配置为不输入密码的。
1) 首先需要切换到root, su - (注意有- ,这和su是不同的,在用命令"su"的时候只是切换到root,但没有把root的环境变量传过去,还是当前用乎的环境变量,用"su -"命令将环境变量也一起带过去,就象和root登录一样)
2) 然后visudo 或者 vi /etc/sudoers, visudo 这个和vi的用法一样,由于可能会有人不太熟悉vi,所以简要说一下步骤
移动光标,到一行root ALL=(ALL) ALL的下一行,按a,进入append模式,输入
your_user_name ALL=(ALL) ALL
然后按Esc,再输入:w保存文件,再:q退出
这样就把自己加入了sudo组,可以使用sudo命令了。
3) 默认5分钟后刚才输入的sodo密码过期,下次sudo需要重新输入密码,如果觉得在sudo的时候输入密码麻烦,把刚才的输入换成如下内容即可:
your_user_name ALL=(ALL) NOPASSWD: ALL
至于安全问题,对于一般个人用户,我觉得这样也可以的。
4)如果你想设置只有某些命令可以sudo的话,your_user_name ALL= (root) NOPASSWD: /sbin/mount, (root) NOPASSWD: /bin/umount, (root) NOPASSWD: /mnt/mount, (root) NOPASSWD: /bin/rm, (root) NOPASSWD: /usr/bin/make, (root) NOPASSWD: /bin/ln, (root) NOPASSWD: /bin/sh, (root) NOPASSWD: /bin/mv, (root) NOPASSWD: /bin/chown, (root) NOPASSWD: /bin/chgrp, (root) NOPASSWD: /bin/cp, (root) NOPASSWD: /bin/chmod
使用sudo时, sudo su - 用户名 就可以了