首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何优雅的在Windows上跑Shell脚本

如何优雅的在Windows上跑Shell脚本

作者头像
爱技术的小黄鸭
发布2023-06-15 15:07:57
发布2023-06-15 15:07:57
3.2K0
举报
文章被收录于专栏:IT小圈IT小圈

前言

我喜欢Shell脚本,格式方便阅读,方便调试。 在Windows上的Bat脚本,相对没那么友好,至少对我来说是这样的,还有一个致命的原因就是不方便调试……这点比较致命。

那有没有一种方法,可以在Windows上跑Shell脚本呢?答案是肯定的。

下面就谈谈我的经历:

起因

  • 我们有一台边界 FTP,经常会异常中断,重启 FTP 即可;
  • 为确保数据能有效传输,FTP 异常后能及时恢复,所以这个计划就产生了;

环境

  • Windows server 2012
  • Mobaxterm 21.2
  • Serv-U 8.6

思路

  • ftp_check.sh 检查 FTP 端口状态,如果失败则重启 FTP,即 Serv-U;
  • 利用 crond 做计划任务,每 10 分钟运行一次 ftp_check.sh 脚本;
  • 记录相关日志到 ftp_check.log ;

代码实现

首先去 Mobaxterm 官网下载最新版,并拷贝到 Windows server 服务器中;

运行 Mobaxterm,并开启一个会话-Shell,类型选择 Bash

在新开的会话中编写 shell 脚本 ---> ftp_check.sh 代码如下仅供参考

代码语言:javascript
复制
#!/bin/bash


# 脚本运行时间
t=$(date "+%F %H:%M:%S")

# FTP 端口状态 1021,且链接状态为 ESTABLISHED
ftp_state=$(netstat -ant | grep '1021' | grep 'ESTABLISHED' > /dev/null;echo $?)
if [ $ftp_state -eq 0 ];then
  echo "$t FTP Running " >> /home/mobaxterm/Desktop/ftp_check.log
else 
  # while 循环判断
  while [ $ftp_check -eq 1 ]
  do
      # 结束相关的 Serv-U 进程:ServUAdmin 和 ServUDaemon
      kill -9 $(ps | grep 'ServUAdmin' | awk '{print $1}')
      kill -9 $(ps | grep 'ServUDaemon' | awk '{print $1}')
  
      # 等待 5 秒,然后启动进程
      sleep 5
      "/home/mobaxterm/Desktop/Serv-U 6.4.0.6/ServUDaemon.exe" &
      "/home/mobaxterm/Desktop/Serv-U 6.4.0.6/ServUAdmin.exe" &

      # 等待 5 秒,再次检查FTP端口
      ftp_state=$(netstat -ant | grep '1021' | grep 'ESTABLISHED' > /dev/null;echo $?)
  done
  echo "$t FTP Stop,Restart Ok " >> /home/mobaxterm/Desktop/ftp_check.log
fi

# 日志文件转换 Linux To Windows
unix2dos /home/mobaxterm/Desktop/ftp_check.log

计划任务

  • Mobaxterm 启动计划任务:crond
  • 编写计划任务:crontab -e

结语

  • 这样在你不关闭 Mobaxterm 下,你的这个任务就会一直运行下去;
  • cron 任务编写有点不友好,需要克服下;
  • 由于日志文件是在shell下完成的,所以当你直接双击打开会没有换行,所以需要进行文件转换(这是由于Linux和Windows换行符不一样导致
  • 万能的 Mobaxterm,只要你敢想,它就能去完成,比如说运行 Python(需要单独下载 Python插件
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 起因
  • 环境
  • 思路
  • 代码实现
  • 计划任务
  • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档