红联Linux门户
Linux帮助

Linux脚本分享:自动关机与计算任务管理

发布时间:2012-02-20 10:48:29来源:Linux社区作者:未知

  编者按:本文分享的bash shell脚本用于实现Linux的自动关机,以及简单的计算任务管理。可以延伸实现其他功能,这里主要是提供一个实现思路。


  1.自动关机脚本

  每隔一定时间检测一次,如果不存在某个进程就关机,如果存在就休眠。

  用法: ./脚本名 进程名 休眠时间

  注意:要有关机的权限(一般来说是root用户或者有sudoer权限)!

  建议用法: screen ./脚本名 进程名 休眠时间

  #/bin/bash

  while :

  do

  thread_num=`ps -e |grep $1 | wc -l`

  if [ $thread_num -eq 0 ]; then

  date >> shutdowntime.log

  shutdown -h

  exit

  else

  echo "Sleeping $2 second..."

  sleep $2

  fi

  done


  2.计算任务管理脚本

  简单的计算任务管理:检测某个为某个名字的进程的个数,如果不是少于设定的个数,就提交任务,直到进程数和设定的相等;如果进程数大于等于设定个数,就休眠一定时间。

  用法:./脚本名 程序名 任务数 循环次数

  建议用screen运行。

  #!/bin/bash

  pro_name=$1

  task_num=$2

  cycle_num=$3

  i=1

  while (( $i <= $cycle_num ))

  do

  pro_num=$(ps -A | grep $pro_name |wc -l)

  if (( $pro_num < $task_num )); then

  echo $i

  #在这里写要执行程序

  sleep 1s

  i=$(($i+1))

  else

  echo 'sleeping 600s'

  sleep 600s

  fi

  done

  另外,可以在循环中针对时段控制任务数:

  core_num=`cat /proc/cpuinfo |grep 'core id' | wc -l`

  time_hour=`date +%H`

  if (( $time_hour >= 23 )) || (( $time_hour < 7 ); then

  task_num=$core_num #晚上23:00以后到早上7点前这段时间,就按机器的core数来提任务

  else

  task_num=$(( $core_num / 2 )) #其它时间只占用一半的core数来用于任务

  fi

  在执行完后所有该做循环这后,也可以加上关机的命令。