如何在远程 Unix 服务器中为 运行 命令编写批处理文件

How to write a batch file for running commands in a remote Unix server

我正在尝试将文件从基于 Linux 的服务器复制到我的 Windows PC。我要复制的文件不容易获得,即我在 putty

中执行了 运行 以下命令
tail -n 100000 conveyor2.log | grep -P 'curingresult OK' | sed 's/FT\ /FT/g' |awk '{print  }' |sed 's/\"//g' | uniq | sort -n |uniq >> myfile.txt

将数据移动到我的文件。现在我必须每 30 分钟将我的文件从服务器移动到 PC。我可以 运行 pscp

中的代码
pscp -pw PASS user@IPADDRESS:/var/mp/95910/log/myfile.txt C:\Users\Administrator\Desktop\Myfolder

用于将文件移动到我的 PC,但我需要它自动完成。另外 "myfile" 需要每 30 分钟自动更新一次。

`

有很多方法可以做到这一点。我个人会在 Windows PC 上设置一个 SSH 服务器(例如 FreeSSHd http://www.freesshd.com/),这样所有事情都可以使用 Linux 服务器一步完成。如果您无法在您的 PC 上安装软件,您仍然可以通过在 Windows PC 和 Linux 服务器上安排脚本来完成这项工作。

首先配置SSH public-key认证从Windows PC连接到Linux服务器。 这是比在脚本中使用明文密码更安全的替代方法,也是计划任务的更好配置。

在 Windows PC 上执行这些步骤:

  1. 打开 PuTTYgen 密钥生成实用程序
  2. 在 "Parameters" select "SSH-2 RSA" 下,保留默认位数 1024
  3. 在 "Actions" 下单击 "Generate" 并在出现提示时四处移动光标
  4. 将 "Key Passphrase" 留空,因为您希望在不每 30 分钟输入密码的情况下自动执行此过程
  5. 在 "Actions" 下,单击 "Save public key" 并提供密钥的文件名和位置
  6. 在 "Actions" 下,单击 "Save private key",确保 "Save as type" 设置为 "PuTTY Private Key Files (*.ppk)"
  7. 打开在第 5 步中保存的 public 密钥(非常重要 - 确保它是 PUBLIC 密钥,而不是私钥),然后将内容复制到剪贴板

在 Linux 服务器上执行这些步骤:

  1. ssh 进入 Linux 服务器,然后使用您喜欢的编辑器打开 ~/.ssh/authorized_keys 文件。如果不存在,您可能需要执行这些命令

    mkdir -p ~/.ssh
    touch ~/.ssh/authorized_keys
    vi ~/.ssh/authorized_keys
    
  2. 将 Windows public 密钥的内容粘贴到此文件中,然后保存并关闭文件

接下来,在Linux服务器上创建一个计划任务,让"myfile"每30分钟更新一次。

  1. 打开文本编辑器并将脚本的内容放入文件中,例如"vi update_myfile.sh"

    #!/bin/bash
    tail -n 100000 conveyor2.log | grep -P 'curingresult OK' | sed 's/FT\ /FT/g' |awk '{print  }' |sed 's/\"//g' | uniq | sort -n | uniq >> /var/mp/95910/log/myfile.txt
    

(根据需要编辑路径)

  1. 使用 cron 将任务安排到 运行 每 30 分钟(每小时过去 15 和 45 分钟)。 运行 命令 "crontab -e",并添加此行,根据需要更改路径:

    15,45 * * * * /home/<username>/update_myfile.sh
    

最后,在 Windows PC 上创建一个脚本来复制文件,与 Linux 脚本 运行s 的时间偏移。

  1. 在记事本中创建一个名为 copy_myfile.bat 的脚本,其中包含:

    pscp user@IPADDRESS:/var/mp/95910/log/myfile.txt C:\Users\Administrator\Desktop\Myfo
    
  2. 您没有提到您在 PC 上 运行ning 的 windows 版本,但是如果 Windows7,请单击“开始”并在“控制面板”下单击 "System and Security",然后单击 "Administrative Tools",然后单击 "Task Scheduler"。如果 Windows 8,只需单击“开始”,然后键入 "Task Scheduler"。

  3. 在 Task Scheduler 中,单击“操作”,然后 "Create Task" 应会出现“创建任务”对话框

  4. 在“常规”选项卡下,为任务指定名称和描述

  5. 在触发器下,单击新建,然后在出现的对话框中 select 每日,单击 "Repeat task every" 复选框和 select“30 分钟”,然后单击确定

  6. 在操作下,单击新建,保留操作设置为 "Start a program" 并浏览到在步骤 1 中创建的 copy_myfile.bat 脚本。单击确定

  7. 单击“确定”,任务应自动安排到 运行

因此,每隔 :15 和 :45 将更新 Linux 服务器文件,并且应该每隔 :00 和 :30 将其复制到您的 Windows PC。这些时间可以根据您的需要进行调整。如果两个系统的时钟同步,你可能不需要15分钟的摆动空间。

希望对您有所帮助!