如何检查文件是否存在于远程服务器上

如何检查文件是否存在于远程服务器上,第1张

在有些情况下,你要测试文件是否存在远程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

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 如何检查文件是否存在于远程服务器上

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情