1、如何编写一个shell脚本,可以自动从服务器A登陆到服务器B,并在服务器B上执行一个操作
expect -c "
set timeout 30;
spawn /usr/bin/ssh admin@制$ServerB-IP
expect {
\"*yes/no*\" {send \"yes\r\"; exp_continue}
\"*password*\" {send \"xxx\r\";}
expect {
\"*# \" {send \"tar zcvf ~/hello.tar.gz hello\r\"}
\"*$ \" {send \"tar zcvf ~/hello.tar.gz hello\r\"}
}
interact"
这样试试
2、如何部署linux服务器监控shell脚本
1、查看主机网卡流量
#!/bin/bash
#network
#Mike.Xu
while : ; do
time=’date +%m”-”%d” “%k”:”%M’
day=’date +%m”-”%d’
rx_before=’ifconfig eth0|sed -n “8″p|awk ‘{print $2}’|cut -c7-’
tx_before=’ifconfig eth0|sed -n “8″p|awk ‘{print $6}’|cut -c7-’
sleep 2
rx_after=’ifconfig eth0|sed -n “8″p|awk ‘{print $2}’|cut -c7-’
tx_after=’ifconfig eth0|sed -n “8″p|awk ‘{print $6}’|cut -c7-’
rx_result=$[(rx_after-rx_before)/256]
tx_result=$[(tx_after-tx_before)/256]
echo “$time Now_In_Speed: “$rx_result”kbps Now_OUt_Speed: “$tx_result”kbps”
sleep 2
done
2、系统状况监控
#!/bin/sh
#systemstat.sh
#Mike.Xu
ip=192.168.1.227
top -n 2| grep “Cpu” >>./temp/cpu.txt
free -m | grep “Mem” >> ./temp/mem.txt
df -k | grep “sda1″ >> ./temp/drive_sda1.txt
#df -k | grep sda2 >> ./temp/drive_sda2.txt
df -k | grep “/mnt/storage_0″ >> ./temp/mnt_storage_0.txt
df -k | grep “/mnt/storage_pic” >> ./temp/mnt_storage_pic.txt
time=`date +%m”.”%d” “%k”:”%M`
connect=`netstat -na | grep “219.238.148.30:80″ | wc -l`
echo “$time $connect” >> ./temp/connect_count.txt
3、监控主机的磁盘空间,当使用空间超过90%就通过发mail来发警告
#!/bin/bash
#monitor available disk space
SPACE=’df | sed -n ‘/ / $ / p’ | gawk ‘{print $5}’ | sed ’s/%//’
if [ $SPACE -ge 90 ]
then
[email protected]
fi
4、监控CPU和内存的使用情况
#!/bin/bash
#script to capture system statistics
OUTFILE=/home/xu/capstats.csv
DATE=’date +%m/%d/%Y’
TIME=’date +%k:%m:%s’
TIMEOUT=’uptime’
VMOUT=’vmstat 1 2′
users=’echo $TIMEOUT | gawk ‘{print $4}’ ‘
LOAD=’echo $TIMEOUT | gawk ‘{print $9}’ | sed “s/,//’ ‘
FREE=’echo $VMOUT | sed -n ‘/[0-9]/p’ | sed -n ’2p’ | gawk ‘{print $4} ‘ ‘
IDLE=’echo $VMOUT | sed -n ‘/[0-9]/p’ | sed -n ’2p’ |gawk ‘{print $15}’ ‘
echo “$DATE,$TIME,$USERS,$LOAD,$FREE,$IDLE” >> $OUTFILE
5、全方位监控主机
#!/bin/bash
# check_xu.sh
# 0 * * * * /home/check_xu.sh
DAT=”`date +%Y%m%d`”
HOUR=”`date +%H`”
DIR=”/home/oslog/host_${DAT}/${HOUR}”
DELAY=60
COUNT=60
# whether the responsible directory exist
if ! test -d ${DIR}
then
/bin/mkdir -p ${DIR}
fi
# general check
export TERM=linux
/usr/bin/top -b -d ${DELAY} -n ${COUNT} > ${DIR}/top_${DAT}.log 2>&1 &
# cpu check
/usr/bin/sar -u ${DELAY} ${COUNT} > ${DIR}/cpu_${DAT}.log 2>&1 &
#/usr/bin/mpstat -P 0 ${DELAY} ${COUNT} > ${DIR}/cpu_0_${DAT}.log 2>&1 &
#/usr/bin/mpstat -P 1 ${DELAY} ${COUNT} > ${DIR}/cpu_1_${DAT}.log 2>&1 &
# memory check
/usr/bin/vmstat ${DELAY} ${COUNT} > ${DIR}/vmstat_${DAT}.log 2>&1 &
# I/O check
/usr/bin/iostat ${DELAY} ${COUNT} > ${DIR}/iostat_${DAT}.log 2>&1 &
# network check
/usr/bin/sar -n DEV ${DELAY} ${COUNT} > ${DIR}/net_${DAT}.log 2>&1 &
#/usr/bin/sar -n EDEV ${DELAY} ${COUNT} > ${DIR}/net_edev_${DAT}.log 2>&1 &
放在crontab里每小时自动执行:
0 * * * * /home/check_xu.sh
这样会在/home/oslog/host_yyyymmdd/hh目录下生成各小时cpu、内存、网络,IO的统计数据。如果某个时间段产生问题了,就可以去看对应的日志信息,看看当时的主机性能如何。
3、shell脚本 ,在linux 下运行一个shell脚本登陆远程unix 服务器,请问这个脚本如何写?
^#!/bin/bash
tmptty=``
tmptty=`basename $tmptty`
tmpname=`whoami`
ip="xxx" #目标主机地址
inp1="xxx^M" #主机的用户名,,注意必须有^M
inp2="xxx^M" #主机的密码,注意必须有^M
inp3="ls^M"
inp4="pwd^M"
inputfile=in
outputfile=out.log
rm -fr $inputfile
rm -fr $outputfile
mknod $inputfile p
touch $outputfile
#file description 7 for out and 8 for in
exec 7<>$outputfile
exec 8<>$inputfile
telnet $ip <&8 >&7 &
sleep 2; echo $inp1 >> $inputfile
sleep 2; echo $inp2 >> $inputfile
sleep 2; echo $inp3 >> $inputfile
sleep 2; echo $inp4 >> $inputfile
tail -f $outputfile &
while true
do
read str
if [[ $str = "quit" || $str = "exit" ]]
then echo $str >> $inputfile exit
else echo $str >> $inputfile
fi
done
ps -ef | grep telnet | grep -v grep | grep -v telnetd | grep $tmptty | grep $tmpname | awk '{print " kill -9", $2}' | sh
ps -ef | grep tail | grep -v grep | grep -v telnetd | grep $tmptty | grep $tmpname | awk '{print " kill -9", $2}' | sh
4、两台Linux服务器,在A写一个shell脚本复制到B,如何在A上控制B运行该shell文件?
那只有在A上面ssh到B,然后在B上运行shell
或者配一个免秘钥,然后在A直接用脚本直接运行,不过原理还是ssh到B,然后再执行命令
5、ICP连接服务器执行shell脚本
看来你的hosts文件夹比较大啊。。。
more把后面的hosts文件一页一页的显示,但把这页传到后面处理完后,它不会动啊。。。要你手动按任何键继续。。。改为cat就行了
6、如何写shell脚本自动通过ssh命令登录到服务器
用EXPECT实现用密码登录,也可配置成不需要密码
#!/usr/bin/expect -f
if { $argc < 3 } {
puts stderr "Usage: $argv0 IPAdress Login OldPasswd"
exit
}
set IPADDR [lindex $argv 0]
set LOGIN [lindex $argv 1]
set OLD_PW [lindex $argv 2]
set timeout 30
stty -echo
spawn ssh $IPADDR -l $LOGIN
expect {
"*Password:*" {
send "$OLD_PW\r"
exp_continue
} "*Last login:*" {
#interact
exit 0
} timeout {
send_user "connection to $IPADDR timeout!\n"
exit 1
} "*incorrect*" {
send_user "password incorrect!\n"
exit 2
} "*Permission*" { #for LINUX ssh
send_user "password Error!\n"
exit 2
} eof {
exit 3
}
}
7、怎么在一个服务器添加shell脚本
1、编写脚本
2、给与脚本可执行权限
3、将脚本名写入/etc/rc.local文件中
8、怎么自动调用另一台服务器的shell脚本
建议使用rsync吧 ,直接可以同步,脚本话也没啥,就一个定时任务
9、怎样在web项目中通过程序控制shell脚本执行并且向shell脚本中传进参数,实现两个服务器上的文件同步?
java是可以执行shell脚本的,如下:
//command就是你在linux上执行脚本的字符串命令
StringBuffer command = new StringBuffer();
command.append(SHELL).append(BLANK);
command.append(CREATEUSER_SH).append(BLANK);
command.append(fsi.getFtpIp()).append(BLANK);
command.append(fsi.getRootPasswd()).append(BLANK);
command.append(fsi.getFixHomePath() + ftpInfo.getHomePath()).append(BLANK);
command.append(ftpInfo.getFtpUser()).append(BLANK);
command.append(ftpInfo.getFtpPasswd()).append(BLANK);
command.append(ftpInfo.getFlag());
// 进程p执行脚本
p = Runtime.getRuntime().exec(command.toString());