如何检查文件是否存在于远程服务器上
在有些情况下,你要测试文件是否存在于远程Linux服务器的某个目录下(例如:/var/run/test_daemonpid),而无需登录到远程服务器进行交互。例如,你可能希望你的脚本根据特定文件是否存在的远程服务器上而由不同的行为。
在本教程中,我将向您展示如何使用不同的脚本语言(如:Bash shell,Perl,Python)查看远程文件是否存在。
这里描述的方法将使用ssh访问远程主机。您首先需要启用无密码的ssh登录到远程主机,这样您的脚本可以在非交互式的批处理模式访问远程主机。您还需要确保ssh登录文件有读权限检查。假设你已经完成了这两个步骤,您可以编写脚本就像下面的例子
使用bash判断文件是否存在于远程服务器上
#!/bin/bash
ssh_host="xmodulo@remote_server"
file="/var/run/testpid"
if ssh $ssh_host test -e $file;
then echo $file exists
else echo $file does not exist
fi
使用perl判断文件是否存在于远程服务器上
#!/usr/bin/perl
my $ssh_host = "xmodulo@remote_server";
my $file = "/var/run/testpid";
system "ssh", $ssh_host, "test", "-e", $file;
my $rc = $ >> 8;
if ($rc) {
print "$file doesn't exist\n";
} else {
print "$file exists\n";
}
使用python判断文件是否存在于远程服务器上
#!/usr/bin/python
import subprocess
import pipes
ssh_host = 'xmodulo@remote_server'
file = '/var/run/testpid'
resp = subprocesscall(
['ssh', ssh_host, 'test -e ' + pipesquote(file)])
if resp == 0:
print ('%s exists' % file)
else:
print ('%s does not exist' % file)
rem 把此vbs放到“开始”菜单——程序——启动,以达到开机启动的目的
'要检查的进程名
strTargetExe = "anotepadexe"
'10秒检查一次
intDelay = 10
strComputer = ""
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
strTargetExe = LCase(strTargetExe)
Do
WSHSleep 1000 intDelay
Set colProcessList = objWMIServiceExecQuery("Select from Win32_Process")
For Each objProcess in colProcessList
If LCase(objProcessName) = strTargetExe Then
Set objWMIService = GetObject _
("winmgmts:{impersonationLevel=impersonate,(Shutdown)}\\" & _
strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIServiceExecQuery _
("Select from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
objOperatingSystemWin32Shutdown(1)
Next
Exit Do
End If
Next
Loop Until False
@echo off
set A=xxxexe
set T=300
echo %A%监测中检测时间为%T%秒一次
for /f "delims=" %%i in ('tasklist /fo csv^|findstr /i "%A%"') do (
for /f "tokens=2 delims=," %%j in ("%%i") do set Pid=%%~j&goto loop)
::查找xxxexe,找到就把它的PID值赋给变量Pid,没有找到关机
goto shut
:loop
::进入查找循环
tasklist|findstr /i "%A%">nul&&goto findnet||goto shut
::查找xxxexe,找到继续检查它的网络连接,没有则关机
:findnet
for /f "skip=4 tokens=4,5 delims= " %%i in ('netstat -ano^|find "%Pid%"') do (
echo %%i%%j|find "%Pid%">nul&&goto delay
)
::根据Pid值,查找它的网络连接情况,有就延时,没有则关机
goto shut
:delay
ping -n %T% 1271>nul&goto loop
:shut
shutdown -s -t 120
下载个 wgetexe (搜 WGET for Windows (win32) )与批处理放到一起
批处理所在文件夹里面不要有 index 文件
@echo off
if exist index del index
for /f "tokens=" %%u in (urltxt) do (
wget -t 1 %%u -o nul&& echo 可以打开: %%u || echo 连接失败: %%u
if exist index del index)
echo&pause
@echo off
set ip=19211681100 (ip地址)
set port=21(瑞口,默认21)
set name=ABC(账户名)
set pass=123 (密码)
set ad=/upload (文件路径)
set file=XXXtxt (文件名)
(
echo open %ip% %port%
echo user %name% %pass%
echo cd %ad%
echo hash
echo prompt
echo bin
echo mget "%file%"
echo bye
)>ftptmp
ftp -n -s:"ftptmp">nul 2>nul
del /q ftptmp>nul 2>nul
if exist %file% (
echo%file%存在
del /q %file%
) else echo%file%不存在
pause
exit
批处理将会识别服务器上" /upload/XXtxt " 是否存在
将前面的 参数替换成你想要的就行了。
你这种需求最好使用一些现成的软件,比如heartbeat,来检测服务器心跳就可以了
脚本写也可以,但是肯定没有软件好
while [ 1 ]
do
result=$(ping -c 3 1921681100|grep "0 received")
if [ -z "$result" ]; then
echo 0
else
echo 1
fi
sleep 60
done
0条评论