Perl自动释放Licence启动Verdi

在工作中,遇到verdi的License不够的情况,某些人占用了多个License,为及时获得一个可用的License,写了一个perl来kill运行时间最长的进程。

主要功能


  • 在perl中,通过(lmstat -a)或者(ps -ef)得到verdi运行情况
  • 得到verdi分配情况
  • 得到verdi占用最多的用户的使用信息
  • 活动该用户使用最长的verdi进程号

具体执行情况

方法一:推荐


方法二:


Perl代码

方法一:推荐


#!/usr/bin/perl
#----------------------------------------------------------------------
#
# Filename: start_verdi
# Description: file function description
#
# Author: 乔木
# Version: 1.0.0
# Create: 2017-12-05 21:29:05
# Last Modified: 2017-12-05 21:29:05
# History: Modify the history
#---------------------------------------------------------------------- #####################################################
# start_verdi
##################################################### use warnings; #####################################################
my (@license_stat,$license_flag,@users_license,@users_name,%verdi_user,$mostverdi_user,$total_lic,$use_lic); @license_stat = `lmstat -f Verdi`; #####################################################
# get license info
#####################################################
$license_flag = 0;
foreach my $line (@license_stat){
chomp($line);
next if($line =~ /^\s*$/);
if($line =~ /Users of Verdi/){
$line =~ /Total of (\d+) licenses issued; Total of (\d+) licenses in use/;
$total_lic = $1;
$use_lic = $2;
#print("total_lic = $total_lic, use_lic = $use_lic\n");
if($use_lic < $total_lic){
system("verdi @ARGV");
exit;
}
next;
}
if($line =~ /^-----------/){
$license_flag = 0;
#print("$line\n"); last;
}
if($license_flag){
push(@users_license, $line);
}
if($line =~ /"Verdi"/){
$license_flag = 1;
#print("$line\n");
}
} #####################################################
# handle info
#####################################################
shift(@users_license); #delect first line
foreach my $line (@users_license){
chomp($line);
#print("$line\n");
push(@users_name,(split /\s+/, $line)[1]);
} #print("users_name = @users_name\n"); #####################################################
# creat user hash >> verdi number
#####################################################
foreach my $user (@users_name){
$verdi_user{$user} += 1;
} my $user_num= keys %verdi_user;
my $i=0;
foreach (sort {$verdi_user{$a} <=> $verdi_user{$b}} keys %verdi_user) {
$i++;
#printf("%-15s %d verdi\n",$_,$verdi_user{$_} );
if($i == $user_num){
$mostverdi_user = $_;
print("\n$_ has the most verdi: $verdi_user{$_}\n\n");
}
} #####################################################
# get process info
#####################################################
foreach my $line (@users_license){
chomp($line);
#print("$line\n");
my $user_name = (split /\s+/, $line)[1]; if($user_name eq $mostverdi_user){
#print("$line\n");
$line =~ /\((mm\d.*)\)/;
my $user_process = $1;
#print("$user_process\n"); $user_process =~ s/\// /;
#print("lmremove -h Verdi $user_process\n");
system("lmremove -h Verdi $user_process");
system("verdi @ARGV");
last;
}
} exit;

方法二:


#!/usr/bin/perl
#----------------------------------------------------------------------
#
# Filename: reqverdi
# Description: file function description
#
# Author:
# Version: 1.0.0
# Create: 2017-12-01 07:23:56
# Last Modified: 2017-12-01 07:23:56
# History: Modify the history
#---------------------------------------------------------------------- #####################################################
# reqverdi
##################################################### use warnings; my (%verdi_user,$mostverdi_user,%prosess_hash,$longest_prosess);
#####################################################
# 获得verdi进程信息
#####################################################
my @user_info = `ps -ef | grep Novas | grep -v "grep" | awk '{print \$1}'`; for(my $i=0;$i < @user_info;$i++){
chomp($user_info[$i]);
#print("$user_info[$i]\n");
} #####################################################
# creat user hash >> verdi number verdi分配情况
#####################################################
foreach my $user (@user_info){
$verdi_user{$user} += 1;
} my $user_num= keys %verdi_user;
my $i=0;
foreach (sort {$verdi_user{$a} <=> $verdi_user{$b}} keys %verdi_user) {
$i++;
printf("%-15s %d verdi\n",$_,$verdi_user{$_} );
if($i == $user_num){
$mostverdi_user = $_;
print("\n$_ has the most verdi: $verdi_user{$_}\n\n");
}
} #####################################################
# get $mostverdi_user info 获得占用最多verdi用户的verdi运行时间
#####################################################
my @most_info = `ps -ef | grep Novas| grep $mostverdi_user| grep -v "grep"`;
#print "@most_info\n"; print("user prosess timer\n");
foreach my $process (@most_info){
my @clump = split /\s+/,$process;
printf("%-10s %-10s %s\n",$clump[0],$clump[1],$clump[6]); ############################
# convert timer
############################
my @day_timer = split /-/,$clump[6];
my @timer = split /:/,$day_timer[-1];
#print("@day_timer @timer\n"); my $timer_convt = 0;
if(@day_timer == 2){
$timer_convt = $day_timer[0]*24*60+$timer[0]*60+$timer[1];
#print("$timer_convt\n");
}
else{
$timer_convt = $timer[0]*60+$timer[1];
#print("$timer_convt\n");
} $prosess_hash{$clump[1]} = $timer_convt;
} #####################################################
# get $mostverdi_user the longest run timer prosess number
# 得到运行最长的进程号
#####################################################
my $prosess_num= keys %prosess_hash;
$i=0;
foreach (sort {$prosess_hash{$a} <=> $prosess_hash{$b}} keys %prosess_hash) {
$i++;
#printf("%-15s %s\n",$_,$prosess_hash{$_} );
if($i == $prosess_num){
$longest_prosess = $_;
my $days = int($prosess_hash{$_}/(24*60));
my $hours = int($prosess_hash{$_}%(24*60)/60);
print("\n$_ has run $days day $hours hours\n\n");
}
} print("kill -9 $longest_prosess\n");
system"kill -9 $longest_prosess";

Perl自动释放Licence启动Verdi的更多相关文章

  1. OC自动释放池autoreleasepool介绍

    自动释放池的机制是:它使得应用在创建新对象时,系统能够有效地管理应用所使用的内存. @autoreleasepool { statements } 在创建新对象时,并且系统未启动ARC特性,那么在使用 ...

  2. 63 (OC)* NSAutoreleasePool 自动释放池

    目录 0:ARC 1: 自动释放池 2:NSAutoreleasePool实现原理 3:autorelease 方法 4: Runloop和Autorelease的关系 5: Using Autore ...

  3. 刀哥多线程自动释放池autoreleasepool

    自动释放池 作用 自动释放对象的 所有 autorelease 的对象,在出了作用域之后,会被自动添加到最近创建的自动释放池中 自动释放池被销毁或者耗尽时,会向池中所有对象发送 release 消息, ...

  4. Delphi 中的自动释放策略-转

    八.使用结构体而不是结构体指针: 很重要 一.指定 Owner 后, 随 Owner 连带释放: //uses Vcl.StdCtrls, Vcl.ExtCtrls; var panel: TPane ...

  5. Autorelease自动释放池的使用

    Autorelease自动释放池的使用 使用ARC开发,只是在编译时,编译器会根据代码结构自动添加了retain.release和autorelease. MRC内存管理原则:谁申请,谁释放 遇到al ...

  6. iOS---NSAutoreleasePool自动释放原理及详解

    前言:当您向一个对象发送一个autorelease消息时,Cocoa就会将该对象的一个引用放入到最新的自动释放池.它仍然是个正当的对象,因此自动释放池 定义的作用域内的其它对象可以向它发送消息.当程序 ...

  7. OC 内存泄露 自动释放池

    花絮:看到下面的代码就想起这么一个调侃: 一个老程序员,功成名就,金盆洗手不在写代码后,决定练练书法.提笔思索良久后在纸上写下:Hello world! /********************** ...

  8. autoreleasepool自动释放池

     示例: @autoreleasepool { ; i[largeNumber; i++) { (因识别问题,该行代码中尖括号改为方括号代替) Person *per = [[Person alloc ...

  9. paip.jdbc 连接自动释放的测试

    paip.jdbc 连接自动释放的测试 使用的mysql jdbc3.1.6  以及5.1.7 测试结果,在没有conn.close()的情况哈.. 作者Attilax  艾龙,  EMAIL:146 ...

随机推荐

  1. javascript创建对象的方法--构造函数模式

    javascript创建对象的方法--构造函数模式 一.总结 构造函数模式作用和不足 1.作用:解决工厂模式不是用new关键字来创建对象的弊端 2.作用:解决工厂模式创建的实例和模型没有内在联系的问题 ...

  2. 斜率优化dp练习

    1.HDU3507 裸题,有助于理解斜率优化的精髓. dp[i]=min(dp[j]+m+(sum[i]-sum[j])2) 很显然不是单调队列. 根据斜率优化的的定义,就是先设两个决策j,k 什么时 ...

  3. http压测工具wrk

    安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持LuaJIT和OpenSSL,不过不用担心,大多数类Unix系统都支持.安装wrk非常简单,只要从github上下载wrk源 ...

  4. numpy_basic

    一.Numpy是什么 Numerical Python,数值的Python,补充了Python语言所欠缺的数值计算能力. Numpy是其它数据分析及机器学习库的底层库. Numpy完全标准C语言实现, ...

  5. Boost 解析xml——插入Item

    XML格式为 <?xml version="1.0" encoding="utf-8"?> <Config> <Item name ...

  6. android 闹钟提醒并且在锁屏下弹出Dialog对话框并播放铃声和震动

    android 闹钟提醒并且在锁屏下弹出Dialog对话框并播放铃声和震动            1.先简单设置一个闹钟提醒事件: //设置闹钟 mSetting.setOnClickListener ...

  7. [python]bug和debug

    bug:代码中存在的语法或者逻辑问题 debug:自查和解决代码中的问题 (coding五分钟,debug两小时) 一.出现bug原因的四大类型 1.粗心 1)错误案例 上面这个错误就是因为 if语句 ...

  8. request.getRemoteUser() Spring Security做权限控制后

    一. request.getRemoteUser();//获取当前缓存的用户,比如Spring Security做权限控制后就会将用户登录名缓存到这里 request.getRemoteAddr(); ...

  9. finalkeyword对JVM类载入器的影响

    众所周知,当訪问一个类的变量或方法的时候.假设没有初始化该类.就会先去初始化一个类 可是,当这个类的变量为final的时候,就不一定了 请看以下的样例 package com.lala.shop; i ...

  10. ajax缓存 header头文件

    浏览器第一次访问服务器的时候,需要从服务器加载很多静态资源,并将这些资源文件缓存在浏览器中,当再次访问页面的时候,如果有相同资源文件就直接到缓存中去加载,这样就会降低服务器的负载和带宽,加快用户访问, ...