IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> SecureCRT 脚本自动登陆(连接)服务器 -> 正文阅读

[系统运维]SecureCRT 脚本自动登陆(连接)服务器

一、 会话对象

打开一个 CRT终端,就是一个 session 对象。session 对象拥有进行服务器的断开(Disconnect)和连接(Connect)操作的方法(函数),同时 session 对象的 Connected 属性可以判断当前会话是否已连接。

注:如果服务器掉电重启,由于笔者的服务器掉电重启的过程需要2到3分钟,因此重启的这段时间内必须使用 sleep 函数等待,之后才能进行服务器的连接(Connect),否则脚本将会报错。

二、示例:

下面的例子演示了,如何使用 ipmitool 命令让服务器掉电重启,并且 CRT 脚本进行服务器重新连接后继续执行脚本,的一个场景。

脚本文件名: test.js

# $language = "JScript"

var gLog_time       = "";
var gScript_name    = "";
var gRemoteHostip   = "";
var gLog_file       = "";

var timer_sleep_sec = 1000;
var timer_sleep_min = 60 * 1000;
var timer_sleep_hour= 60 * 60 * 1000;

var forReading 				= 1;
var forWriting 				= 2;
var forAppending 			= 8;
var UPGRADE                 = 2;                   //升级
var EXIT					= 1;
var TRUE					= 0;
var FALSE					= -1;
var BUTTON_OK 				= 0;					// OK button only
var BUTTON_CANCEL 			= 1;					// OK and Cancel buttons
var BUTTON_ABORTRETRYIGNORE = 2; 					// Abort, Retry, and Ignore buttons
var BUTTON_YESNOCANCEL 		= 3;					// Yes, No, and Cancel buttons
var BUTTON_YESNO 			= 4;					// Yes and No buttons
var BUTTON_RETRYCANCEL	 	= 5;					// Retry and Cancel buttons
var ICON_STOP 				= 16;					// Critical message; displays STOP icon.
var ICON_QUESTION 			= 32;					// Warning query; displays '?' icon.
var ICON_WARN	 			= 48;					// Warning message; displays '!' icon.
var ICON_INFO 				= 64;					// Information message; displays 'i' icon.

function get_secure_session()
{
    crt.Screen.Send("\n");
    crt.Sleep(300);
    crt.Screen.Clear();
    
    // 获取当前时间
    crt.Screen.Send("sleep 1; echo `date +%Y-%m-%d_%H-%M-%S` | awk '{printf(\"%s\", $0)} END{print \"INFO_END\"}' \n");
    crt.Sleep(300);
    crt.Screen.Clear();
    
    gLog_time = crt.Screen.ReadString("INFO_END", 3);
    crt.Sleep(timer_sleep_sec);
    crt.Screen.Send("\n");
    
    //var ip = crt.Session.LocalAddress;
    //crt.Screen.Send("# ip: "+ip+" \n");
    
    gRemoteHostip = crt.Session.RemoteAddress;
    crt.Screen.Send("# remoteip: "+gRemoteHostip+" \n");
    
    // 获取当前脚本文件名
    var name = script_name = crt.ScriptFullName.split("\\");
    gScript_name = name.pop();
    crt.Screen.Send("# ScriptName: "+gScript_name+" \n");
    
    gLog_file = gRemoteHostip+"_"+gScript_name+"_"+gLog_time+".log"; //日志记录名字
    
    return 0;
}

function process_log_open()
{
    /*************************************************************************************************/
    //Log(start[, append[, raw]])
    crt.session.Log(false);                                                        //先关闭日志记录
    crt.session.LogFileName = gLog_file;
    crt.session.Log(true, true);                                                   //打开日志记录
    //crt.Screen.Synchronous = true;    //屏显同步 注:不要使用该设置,会影响 crt.Screen.Clear() 清屏函数的使用
    crt.Screen.Send("# LogName: "+gLog_file+" \n");
    
    return 0;
}

function power_cycle()
{
    crt.Screen.Send("\n");
    crt.Screen.Send("# Power Cycle process will take for 150 seconds! \n");
    crt.Sleep(timer_sleep_sec);
    
    crt.Screen.Send(" sleep 1;ipmitool chassis power cycle \n");
    if (0 == crt.Screen.WaitforStrings("Chassis Power Control: Cycle", 2))
    {
        crt.Dialog.MessageBox("Power error: ipmitool command is invalid!!!", " 错误 ", ICON_STOP);  
        return -1;
    }

    crt.session.Disconnect();
    crt.Sleep(150 * timer_sleep_sec);
    
    while(true)
    {
        crt.session.Connect("/s " +gRemoteHostip);
        crt.Sleep(timer_sleep_sec);
        if (crt.Session.Connected)
        {   
            process_log_open();
            break;
        }
    }
    
    crt.Sleep(timer_sleep_sec);
    crt.Screen.Send("\n");
    crt.Screen.Send("# Please quit this script,and execute test script! \n");

    return 0;
}

function ftestOkResultlogo(){
    crt.Sleep(timer_sleep_sec);
    crt.Screen.Send("\n");
    crt.Screen.Send("################                               ########                   ####      ######\n");
    crt.Screen.Send("################                           ######    ######               ####    ######  \n");
    crt.Screen.Send("      ####                                 ####        ####               ####  ######    \n");
    crt.Screen.Send("      ####                ####           ######        ######             ##########      \n");
    crt.Screen.Send("      ####                ####           ######        ######             ##########      \n");
    crt.Screen.Send("      ####                               ######        ######             ############    \n");
    crt.Screen.Send("      ####                               ######        ######             ####  ######    \n");
    crt.Screen.Send("      ####                                 ####        ####               ####    ######  \n");
    crt.Screen.Send("      ####                ####             ######    ######               ####     #####  \n");
    crt.Screen.Send("      ####                ####                 ########                   ####      ######\n");
    crt.Screen.Send("\n");
}

function main()
{
    get_secure_session();
    
    process_log_open();
  
    ftestOkResultlogo();
    
    power_cycle();  
}

日志文件名:192.168.89.100_test.js_2022-05-09_20-55-13.log

[root@localhost ~]# 
[root@localhost ~]# # remoteip: 192.168.89.100 
# LogName: 192.168.89.100_test.js[root@localhost ~]# # ScriptName: test.js 
[root@localhost ~]# # LogName: 192.168.89.100_test.js_2022-05-09_20-55-13.log 
[root@localhost ~]# 
[root@localhost ~]# ################                               ########                   ####      ######
[root@localhost ~]# ################                           ######    ######               ####    ######  
[root@localhost ~]#       ####                                 ####        ####               ####  ######    
[root@localhost ~]#       ####                ####           ######        ######             ##########      
[root@localhost ~]#       ####                ####           ######        ######             ##########      
[root@localhost ~]#       ####                               ######        ######             ############    
[root@localhost ~]#       ####                               ######        ######             ####  ######    
[root@localhost ~]#       ####                                 ####        ####               ####    ######  
[root@localhost ~]#       ####                ####             ######    ######               ####     #####  
[root@localhost ~]#       ####                ####                 ########                   ####      ######
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# # Power Cycle process will take for 150 seconds! 
[root@localhost ~]#  sleep 1;ipmitool chassis power cycle 
Last login: Mon May  9 19:45:19 2022 from 192.168.79.64
ABRT has detected 2 problem(s). For more info run: abrt-cli list --since 1652096719
[root@localhost ~]# # LogName: 192.168.89.100_test.js_2022-05-09_20-55-13.log 
[root@localhost ~]# 
[root@localhost ~]# # Please quit this script,and execute test script! 

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-05-11 16:45:38  更:2022-05-11 16:48:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 15:43:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码