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

标签 linux batch-file automation putty pscp

我正在尝试将文件从基于 Linux 的服务器复制到我的 Windows PC。我想要复制的文件不容易获得,即我必须在 putty 中运行以下命令

tail -n 100000 conveyor2.log | grep -P 'curingresult OK' | sed 's/FT\ /FT/g' |awk '{print $5 $13}' |sed 's/\"//g' | uniq | sort -n |uniq >> myfile.txt

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

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

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

`

最佳答案

有很多方法可以实现这一点。就我个人而言,我会在 Windows PC 上设置一个 SSH 服务器(例如 FreeSSHd http://www.freesshd.com/ ),这样一切都可以使用 Linux 服务器一步完成。如果您无法在 PC 上安装软件,您仍然可以通过在 Windows PC 和 Linux 服务器上调度脚本来完成此操作。

首先配置 SSH 公钥身份验证以从 Windows PC 连接到 Linux 服务器。 这是比在脚本中以明文形式使用密码更安全的替代方案,也是计划任务的更好配置。

在 Windows PC 上执行以下步骤:

  1. 打开 PuTTYgen key 生成实用程序
  2. 在“参数”下选择“SSH-2 RSA”并将位数保留为默认值 1024
  3. 在“操作”下点击“生成”并在出现提示时移动光标
  4. 将“ key 密码”留空,因为您希望自动化该过程,而不是每 30 分钟输入一次密码
  5. 在“操作”下,点击“保存公钥”并提供 key 的文件名和位置
  6. 在“操作”下,点击“保存私钥”,确保“保存类型”设置为“PuTTY 私钥文件 (*.ppk)”
  7. 打开第 5 步中保存的公钥(非常重要 - 确保它是公钥,而不是私钥),然后将内容复制到剪贴板

在 Linux 服务器上执行以下步骤:

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

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

接下来,在 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 $5 $13}' |sed 's/\"//g' | uniq | sort -n | uniq >> /var/mp/95910/log/myfile.txt
    

(根据需要编辑路径)

  • 使用 cron 将任务安排为每 30 分钟运行一次(每小时的 15 分和 45 分)。运行命令“crontab -e”,并添加此行,根据需要更改路径:

    15,45 * * * * /home/<username>/update_myfile.sh
    
  • 最后,在 Windows PC 上创建一个脚本来复制该文件,时间与 Linux 脚本运行时的偏移时间不同。

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

      pscp user@IPADDRESS:/var/mp/95910/log/myfile.txt C:\Users\Administrator\Desktop\Myfo
      
    2. 您没有提及您在 PC 上运行的 Windows 版本,但如果是 Windows 7,请单击“开始”,然后在“控制面板”下单击“系统和安全”,然后单击“管理工具”,然后单击“任务计划程序”。如果是 Windows 8,只需单击“开始”,然后输入“任务计划程序”。

    3. 在“任务计划程序”中,单击“操作”,然后单击“创建任务”,然后将出现“创建任务”对话框

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

    5. 在“触发器”下,单击“新建”,然后在出现的对话框中选择“每日”,单击“重复任务间隔”复选框并选择“30 分钟”,然后单击“确定”

    6. 在“操作”下,单击“新建”,将“操作”设置为“启动程序”,然后浏览到在步骤 1 中创建的 copy_myfile.bat 脚本。单击“确定”

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

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

    希望这有帮助!

    关于linux - 如何编写批处理文件以在远程 Unix 服务器中运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31621560/

    相关文章:

    php - 从 PHP/Linux 读取 Foxpro 文件 (.DBF)

    batch-file - 配置 Intellij IDEA 运行批处理文件

    windows - 如何识别批处理文件中哪一行有语法错误?

    windows - 如何在 mac 机器上通过 ssh 获取 windows 机器的 GUI 访问权限?

    linux - cpu时间在虚拟机中跳跃很多

    linux - 在键盘热插拔上加载模块

    windows - 这可能吗? "ECHO. The time is: %time/T%"

    azure - Azure 数据工厂的发布流程是否支持导出 ARM 模板?

    javascript - Cucumber生成空白html报告

    linux - 通过 inode 获取文件详细信息