用php创建一个守护进程

参考文章

示例代码

想到之前看到linux下,nohup和&一起使用可以创建一个后台job,例如:

nohup ping www.google.com & 1>/dev/null 2&>1

意思是让ping命令不接受hangup信号,也就脱离了终端的控制。该命令会在后台变成一个job:

[1]  33765

[1]表示job号码,33765代表进程id。使用jobs可以列出所有的jobs,也可以使用ps -ef|grep查看

bg %num命令可以将一个job后台执行

fg %num命令可以将一个命令前台执行  // num代表job号码

ctrl + z可以将一个job挂起暂停

kill %num 或 kill pid可以终止某个job

自动登录ssh脚本

远程登录服务器,每次都要输命令-复制粘贴密码-切换目录,非常麻烦,于是上网查了一下有没有自动登录的脚本,果然有,研究了一下,使用很方便。

脚本使用的shell不是bash,而是expect。之前我们都是直接把一堆命令写在脚本里,但是如果遇到交互式的命令,比如ssh,telnet等就没有办法了,expect正是为了满足交互式命令的自动化处理。

在使用前,先需要安装tcl和expect,centos下,直接

sudo yum install tcl expect

也可以去官网下载压缩包,解压,然后编译安装。

下载完就可以使用了,具体expect的语法很丰富,网上也有很多文章讲的很详细。

对于ssh登录,我的简单三行脚本就搞定了。

!#/usr/bin/expect
set timeout 10
spawn ssh root@xx.xx.xx.xx -p xxxx
expect {
    "*password*" {send "ur password"}
}
interact

 spawn是我们需要执行的命令

 expect可以理解为接受远程服务器与我们交互所发送的信息,比如让我们输入password,在字符串前面加上-re,表示用正则匹配

 send则可以理解为发送需要的信息给远程服务器。

 interact执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远  程终端上。如果你只是登录过去执行一段命令就退出,可改为 expect eof

bar

#/bin/bash
PATH=${PATH}:~/bin
export PATH

预览
eat[1]="卖当当漢堡包"       # 写下你所收集到的店家!
eat[2]="肯爷爷炸鸡"
eat[3]="彩虹日式便当"
eat[4]="越油越好吃大雅"
eat[5]="想不出吃啥学餐"
eat[6]="太师父便当"
eat[7]="池上便当"
eat[8]="怀念火车便当"
eat[9]="一起吃方便面"

index=0
while [ 1 ]
do

check=$((${RANDOM}*9/32767 +1))

if [ ${#picked[@]} ==  0 ]; then
picked[${index}]=${check}
continue
fi

for ((i=0;i<${#picked[@]};i++))
do
   if [ ${check} == ${picked[${i}]} ]; then
      continue 2
   fi
done

((index++))
picked[${index}]=${check}

if [ ${index} == 2  ]; then
break
fi

done

for pick in $(echo ${picked[*]})
do
echo ${eat[${pick}]}
done