前言
我喜欢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
代码如下仅供参考
;#!/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 下,你的这个任务就会一直运行下去;
- cron 任务编写有点不友好,需要克服下;
- 由于日志文件是在shell下完成的,所以当你直接双击打开会没有换行,所以需要进行文件转换(
这是由于Linux和Windows换行符不一样导致
) - 万能的 Mobaxterm,只要你敢想,它就能去完成,比如说运行 Python(
需要单独下载 Python插件
)
还不快抢沙发