我的问题:
我在服务器A上有一个bash脚本,在另一台服务器上有一个php脚本,服务器B.服务器A上的shell脚本用于在另一台服务器上运行php脚本,但是前几天有人把坏了rm -rf
命令在错误的目录上并删除它。我有一个旧的shell脚本备份,但缺少第二个服务器上调用php脚本的代码。这些几行(事实上,如果我记得很清楚的话)是几年前由另一个人写的,他不再与我们合作而且我也无法联系她。我不是一个php人,对这种语言很陌生,在过去两天在网上搜索了一些提示后,没有结果,我决定在这里发帖。
我作为可以运行shell脚本的用户登录到服务器A. 我有另外几个用户名/密码用于登录服务器B.此用户可以运行php脚本。这是这个PHP脚本:
<?php
/*
php -f invoke_manage_auto_requests_files.php "create|delete|upload" "vide|pre|res|obs" "nrcc|cgcm|arpege|crcm|rc|sta|md|mds" id "processing|nom du fichier"
eg . php -f invoke_manage_auto_requests_files.php create pre nrcc 15678 processing
*/
if($argv[1] == "upload") {
$argv[5] = '@' . realpath($argv[5]);
}
$post_fields = array( 'ACTION' => $argv[1] , 'PREFIX' => $argv[2] , 'REQ_TYPE' => $argv[3] , 'ID' => $argv[4] , 'FILE_CONTENT' => "$argv[5]");
$post_fields['VALIDATE'] = md5("This is legit");
$url = "http://serverB/scripts/manage_auto_requests_files.php";
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS, $post_fields );
curl_exec($ch);
curl_close($ch);
?>
我正在寻找致电的方式:
php -f invoke_manage_auto_requests_files.php create pre nrcc 15678 processing
(例如)
但是从bash脚本。我只知道这似乎是一个卷曲的电话,但我不确定。
以下是我的服务器的规格:
服务器A:PHP Version 4.4.4-8+etch6
系统Linux hawa 2.6.26-bpo.2-686-bigmem#1 SMP Fri 7月3日21:38:05 UTC 2009 i686
服务器B:PHP Version 4.3.9
System Linux verglas 2.6.9-34.ELsmp#1 SMP Fri Feb 24 16:54:53 EST 2006 i686
感谢阅读或帮助。
答案 0 :(得分:1)
Hummm。这里不需要卷曲。使用注释使我认为php脚本应该从CLI执行,而不是从http Web服务器执行。
首先,确保您无需密码即可从服务器A登录服务器B.
如果不是这种情况,请使用ssh-copy-id
将用户的公钥从serverA复制到serverB
然后,只需使用服务器A的ssh到服务器B来运行脚本:
# Usage : call_server_b id
# @param string action "create|delete|upload"
# @param string status "vide|pre|res|obs"
# @param string param3 "nrcc|cgcm|arpege|crcm|rc|sta|md|mds"
# @param integer id
# @param integer resource "processing|nom du fichier"
call_server_b() {
local usage="Usage: $0 action status param3 id resource"
if [ $# -ne 5 ]
then
echo $usage
fi
local action=$1;shift
local status=$1;shift
local param3=$1;shift
local id=$1;shift
local resource=$1
case $action in
create|delete|upload)
# all good
;;
*)
echo "wrong action parameter : " $action >&2
exit 1
;;
esac
case $status in
vide|pre|res|obs)
# all good
;;
*)
echo "wrong status parameter : " $status >&2
exit 1
;;
esac
case $param3 in
nrcc|cgcm|arpege|crcm|rc|sta|md|mds)
# all good
;;
*)
echo "wrong param3 parameter : " $param3 >&1
exit 1
;;
esac
case $resource in
processing|'nom du fichier')
# all good
;;
*)
echo "wrong resource parameter : " $resource >&1
exit 1
;;
esac
ssh user@serverB \
php -f /absolute/path/to/invoke_manage_auto_requests_files.php \
$action $status $param3 $id $resource
}
call_server_b create pre nrcc 15678 processing