60天shell脚本计划-5/12-渐入佳境
--作者:飞翔的小胖猪
--创建时间:2021年2月16日
--修改时间:2021年2月20日
说明
每日上传更新一个shell脚本,周期为60天。如有需求的读者可根据自己实际情况选用合适的脚本,也可在评论区留言提出脚本需求,作者会尽快根据需求编写相关脚本对功能进行实现。
每篇文章包含5个脚本。
总进度:5/12
上一篇脚本链接:https://www.cnblogs.com/Pigs-Will-Fly/p/14399775.html
下一篇脚本链接:https://www.cnblogs.com/Pigs-Will-Fly/p/14415847.html
主要内容
21年2月16日-mysql连接脚本
************************************************************************************************************************************************************************************************************************************
脚本说明
mysql连接脚本,在脚本中键入指定的sql执行。好像没有实质性的用处。
文件说明
Mysql_driver.sh:脚本主体文件
脚本主体
[root@135 21_Mysql_driver]# cat Mysql_driver.sh
#!/bin/bash
#定义变量数据相关参数,其他的函数需要使用时直接从这里获取。
connect_db(){
IP=${IP:-127.0.0.1}
PORT=${PORT:-3306}
USERNAME=${USERNAME:-test21}
PASSWORD=${PASSWORD:-123456}
DBNAME=${DBNAME:-test_db}
echo -e "DB connection parameters>> \n HOSTNAME: $IP \n PORT: $PORT \n USERNAME: $USERNAME \n PASSWORD: $PASSWORD \n DB_NAME: $DBNAME"
} #测试数据库是否能够连接。
test_connection_status(){
mysql -h${IP} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e"show tables;" &>/dev/null
return $?
} #执行语句函数
edit_data(){
sql_language=${1:- }
echo "sql执行语言为:$sql_language "
mysql -h${IP} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e"${sql_language};"
if [ $? -eq 0 ];then
echo "Command executed successfully。"
else
echo "Command execution failed!"
fi
} #主函数
main(){
#输入数据连接参数
IP="127.0.0.1"
PORT="3306"
USERNAME="test21"
PASSWORD="123456"
DBNAME="test_db" #需要执行的sql语句,通过执行时传入,如果为传入则查看所有的表名
sql_l='select * from t1;' connect_db
test_connection_status
sql_l_f=`echo "${sql_l} commit;"` if test_connection_status;then
echo "数据库连接成功,可以执行命令。"
edit_data "${sql_l_f}"
else
echo -e "数据库连接失败!!!\nCase:\n 1.请检查连接参数是否正确。\n 2.数据库连接设置是否正确。"
fi
} main
结果

**************************************************************************************************************2021年2月16日脚本结束*****************************************************************************************************************
21年2月17日-显示love脚本
************************************************************************************************************************************************************************************************************************************
脚本说明
循环显示 i love字母。
文件说明
display_love.sh:脚本主体文件
脚本主体
[root@135 22_i_love_you]# cat display_love.sh
#!/bin/bash
trap 'onCtrlC' INT
# 显示LOVE
love1(){
echo ""
echo " #### "
echo " ## "
echo " ## "
echo " ## "
echo " ## "
echo " ## "
echo " ## "
echo " ## "
echo " ## "
echo " #### "
} love2(){
echo ""
echo "## "
echo "## "
echo "## "
echo "## "
echo "## "
echo "## "
echo "## "
echo "## "
echo "#########"
echo "######## "
} love3(){
echo ""
echo " ###### "
echo " ######## "
echo " ### ### "
echo " ### ### "
echo " ### ### "
echo " ### ### "
echo " ### ### "
echo " ### ### "
echo " ######## "
echo " ###### "
} love4(){
echo ""
echo "## ##"
echo "## ##"
echo "## ##"
echo " ## ## "
echo " ## ## "
echo " ## ## "
echo " ## ## "
echo " ## ## "
echo " ### "
echo " # "
} love5(){
echo ""
echo " #############"
echo " ############"
echo " ##"
echo " ##"
echo " ###########"
echo " ###########"
echo " ##"
echo " ##"
echo " ###########"
echo " #############"
} display_love(){
clear
while :
do
for i in {1..5}
do
love${i}
love${i} > love${i}
sleep 0.5
clear
done
sleep 0.7
paste love1 love2 love3 love4 love5
sleep 2
rm -rf love1 love2 love3 love4 love5
clear
done
} #捕获ctrl+c执行删除临时文件。
onCtrlC(){
rm -rf love1 love2 love3 love4 love5 &>/dev/null
exit 99
} display_love
结果

**************************************************************************************************************2021年2月17日脚本结束*****************************************************************************************************************
21年2月18日-echo显示hello word
************************************************************************************************************************************************************************************************************************************
脚本说明
使用echo的定位符来回显示“hello,word!”这句话。
文件说明
advanced_echo.sh:脚本主体文件
脚本主体
[root@135 23_advanced_echo]# cat advanced_echo.sh
#!/bin/bash
clear
hello=("H" "e" "l" "l" "o" "," "W" "o" "r" "d" "!")
arr_len=${#hello[*]}
while :
do
for((i=0;i<$arr_len;i++))
do
let j=$i+3
echo -e "\033[5;${j}H${hello[i]}"
sleep 0.2
done
clear
for((i=$arr_len;i>=0;i--))
do
let j=$i+3
echo -e "\033[5;${j}H${hello[i]}"
sleep 0.2
done
clear
done
结果


**************************************************************************************************************2021年2月18日脚本结束*****************************************************************************************************************
21年2月19日-系统网络接口流量脚本
************************************************************************************************************************************************************************************************************************************
脚本说明
脚本提取/proc/net/dev文件内容计算出系统中网卡流量信息,接口数据流量大小,错误包个数等。
文件说明
net_info.sh:脚本主体文件
脚本主体
[root@135 24_net_info]# cat net_info.sh
#!/bin/bash
#网络流量信息
#通过两次读取/proc/net/dev文件,间隔一秒,导出1秒的网卡流量数据。
net_info(){
echo -e "-------------Net------------\n" #获取网口名
net_dict=`awk '$1!~/lo/{if(NR>2)print $1}' /proc/net/dev|sed 's/\://g'` #截取两个数据间隔时间为1秒
net_info_old=`awk '$1!~/lo/{if(NR>2)print}' /proc/net/dev`
#设置文件提取信息间隔为1秒
sleep 1
net_info_new=`awk '$1!~/lo/{if(NR>2)print}' /proc/net/dev` echo -e "New: \n$net_info_new\n"
echo -e "Old: \n$net_info_old\n" echo "$net_dict"| while read dev_name
do
rx_old=`echo "$net_info_old"|grep $dev_name|awk '{printf $2}'`
rx_new=`echo "$net_info_new"|grep $dev_name|awk '{printf $2}'`
rx_old_p=`echo "$net_info_old"|grep $dev_name|awk '{printf $3}'`
rx_new_p=`echo "$net_info_new"|grep $dev_name|awk '{printf $3}'`
rx_old_e=`echo "$net_info_old"|grep $dev_name|awk '{printf $4}'`
rx_new_e=`echo "$net_info_new"|grep $dev_name|awk '{printf $4}'` tx_old=`echo "$net_info_old"|grep $dev_name|awk '{printf $10}'`
tx_new=`echo "$net_info_new"|grep $dev_name|awk '{printf $10}'`
tx_old_p=`echo "$net_info_old"|grep $dev_name|awk '{printf $11}'`
tx_new_p=`echo "$net_info_new"|grep $dev_name|awk '{printf $11}'`
tx_old_e=`echo "$net_info_old"|grep $dev_name|awk '{printf $13}'`
tx_new_e=`echo "$net_info_new"|grep $dev_name|awk '{printf $13}'` rx=$((${rx_new}-${rx_old}))
rx_p=$((${rx_new_p}-${rx_old_p}))
rx_e=$((${rx_old_e}-${rx_new_e})) tx=$((${tx_new}-${tx_old}))
tx_p=$((${tx_new_p}-${tx_old_p}))
tx_e=$((${tx_old_e}-${tx_new_e})) #echo "$rx"
#echo "$rx_p"
echo -e "Net_name: $dev_name"
echo -e " 收流量/B: $rx\n 收包数/个: $rx_p\n 收错误包/个: $rx_e\n 发流量/B: $tx\n 发包数/个: $tx_p\n 发包错误数/个: $tx_e\n" done } main(){
net_info
} main
结果

**************************************************************************************************************2021年2月19日脚本结束*****************************************************************************************************************
21年2月20日-系统监控脚本(详细版)
************************************************************************************************************************************************************************************************************************************
脚本说明
脚本通过8个函数获取当前操作系统的性能数据,包括cpu、内存、磁盘io、网络流量、进程信息、端口及打开文件限制、系统基本信息、文件md5值比对。
脚本只对使用比较广泛的数据进行采集,如果需要更详细的数据各位看官可在对应的函数中进行代码增减。
文件说明
performance_info.sh:脚本主体文件
脚本主体
[root@135 25_cpu_info]# cat performance_info.sh
#!/bin/bash
#cpu信息
cpu_info(){
Cpu_Num=`nproc` #获取逻辑CPU的个数
Avage_five_cpu=`uptime | sed 's/.*load average: //g' | sed 's#\,##g'|awk '{print $2}'` #采集5分钟CPU负载情况
let Used_rate_cpu=100-`vmstat 1 2 |awk '{if(NR>3){printf $(NF-2) }}'` #cpu使用率
CPU_queue_depth=`vmstat 1 2 |awk '{if(NR>3){printf $1}}'` #cpu队列深度 #cpu信息总输出
echo -e "-------------CPU------------\n"
echo -e "Cpu_num: ${Cpu_Num:-null}\nCpu five avage: ${Avage_five_cpu:-null}\nCPU_rate: ${Used_rate_cpu:-null}\nCPU_queue: ${CPU_queue_depth:-null}\n"
} #内存信息
mem_info(){
all_mem_info=`awk '/^MemTotal|^MemFree|^SwapTotal|^SwapFree|^Buffers|^Cached/{print}' /proc/meminfo` total_mem=`echo "$all_mem_info"|awk '/MemTotal/{printf ("%d\n",$2/1024)}'`
free_mem=`echo "$all_mem_info"|awk '/MemFree/{printf ("%d\n",$2/1024)}'`
total_swap=`echo "$all_mem_info"|awk '/SwapTotal/{printf ("%d\n",$2/1024)}'`
free_swap=`echo "$all_mem_info"|awk '/SwapFree/{printf ("%d\n",$2/1024)}'`
buffer=`echo "$all_mem_info"|awk '/Buffers/{printf ("%d\n",$2/1024)}'`
cached=`echo "$all_mem_info"|awk '/Cached/{printf ("%d\n",$2/1024)}'`
swappiness=`cat /proc/sys/vm/swappiness ` #内存信息总输出
echo -e "-------------Mem------------\n"
echo -e "Swappiness: ${swappiness:-null}"
echo -e "Total_Mem: ${total_mem:-null}MB\nFree_mem: ${free_mem:-null}MB\nTotal_swap: ${total_swap:-null}MB\nFree_mem: ${free_swap:-null}MB\nBuffers: ${buffer:-null}MB\nCached: ${cached:-null}MB\n"
} #磁盘IO信息
io_info(){
#不适用于rhel8以上的版本
disk_num=`iostat -dxy 1 1 |awk '$1~/[svx]d[a-z]$/'|wc -l`
io_info=`iostat -dxy 1 1 |awk '$1~/[svx]d[a-z]$/'` #echo "$io_info" |while read dev_name r_s w_s rkB_s wkB_s rrqm_s wrqm_s rrqm wrqm r_await w_await aqu_sz rareq_sz wareq_sz svctm util
echo -e "-------------I/O------------\n"
echo "$io_info" |while read dev_name line
do
echo -e "Dev_name: $dev_name"
iops=`echo "$line" | awk '{printf ("%f\n",$1+$2)}'`
rbps=`echo "$line" | awk '{printf ("%f\n",$3/1024)}'`
wbps=`echo "$line" | awk '{printf ("%f\n",$4/1024)}'`
rwbps=`echo "$line" | awk '{printf ("%f\n",($3+$4)/1024)}'`
util=`echo "$line" | awk '{printf ("%f\n",$NF)}'` #磁盘信息总输出
echo -e " iops: $iops\n r/bps: $rbps\n r/bps: $wbps\n 吞吐量: $rwbps\n 响应时间: ${util}\n"
done
} #网络流量信息
net_info(){
echo -e "-------------Net------------\n" #获取网口名
net_dict=`awk '$1!~/lo/{if(NR>2)print $1}' /proc/net/dev|sed 's/\://g'` #截取两个数据间隔时间为1秒
net_info_old=`awk '$1!~/lo/{if(NR>2)print}' /proc/net/dev`
sleep 2
net_info_new=`awk '$1!~/lo/{if(NR>2)print}' /proc/net/dev` echo -e "New: \n$net_info_new"
echo -e "Old: \n$net_info_old" echo "$net_dict"| while read dev_name
do
rx_old=`echo "$net_info_old"|grep $dev_name|awk '{printf $2}'`
rx_new=`echo "$net_info_new"|grep $dev_name|awk '{printf $2}'`
rx_old_p=`echo "$net_info_old"|grep $dev_name|awk '{printf $3}'`
rx_new_p=`echo "$net_info_new"|grep $dev_name|awk '{printf $3}'`
rx_old_e=`echo "$net_info_old"|grep $dev_name|awk '{printf $4}'`
rx_new_e=`echo "$net_info_new"|grep $dev_name|awk '{printf $4}'` tx_old=`echo "$net_info_old"|grep $dev_name|awk '{printf $10}'`
tx_new=`echo "$net_info_new"|grep $dev_name|awk '{printf $10}'`
tx_old_p=`echo "$net_info_old"|grep $dev_name|awk '{printf $11}'`
tx_new_p=`echo "$net_info_new"|grep $dev_name|awk '{printf $11}'`
tx_old_e=`echo "$net_info_old"|grep $dev_name|awk '{printf $13}'`
tx_new_e=`echo "$net_info_new"|grep $dev_name|awk '{printf $13}'` rx=$((${rx_new}-${rx_old}))
rx_p=$((${rx_new_p}-${rx_old_p}))
rx_e=$((${rx_old_e}-${rx_new_e})) tx=$((${tx_new}-${tx_old}))
tx_p=$((${tx_new_p}-${tx_old_p}))
tx_e=$((${tx_old_e}-${tx_new_e})) #echo "$rx"
#echo "$rx_p"
echo -e "Net_name: $dev_name"
echo -e " RX: $rx\n RX_P: $rx_p\n RX_E: $rx_e\n TX: $tx\n TX_P: $tx_p\n TX_E: $tx_e\n"
done
} #进程信息
process_info(){
echo -e "----------------------------------------------Process---------------------------------------------\n"
top_head=`ps aux|head -1` #cpu占用top5
top_cpu=`ps aux|grep -v PID|sort -rn -k +3|head` #内存占用top5
top_mem=`ps aux|grep -v PID|sort -rn -k +4|head` #业务进程传参
yw_p_name="sshd"
yw_p_num=`ps -ef | grep -i ${yw_p_name:- } | grep -v grep|wc -l` #僵尸进程
zombie_num=`ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]'|wc -l` #打开进程数
process_num=`ps -aux | wc -l` #最大允许进程数
limit_total_p_n=`ulimit -u` #程序相关总输出
echo -e "$yw_p_name进程数量: ${yw_p_num:-null}\n僵尸进程数量: ${zombie_num:-null}\n运行进程数量: $((${process_num:-null}-1))\n当前用户允许进程数: ${limit_total_p_n:-null}\n"
echo -e "$top_head\nCpu---------------\n$top_cpu\n\nMem------------------\n$top_mem\n" } #端口及文件
port_file_limit(){
echo -e "-------------Port && File------------\n"
#端口数分别统计ipv4和ipv6
port_4_n=`netstat -alntup | grep -v -E '^tcp6|^udp6' |egrep -i '^tcp|^udp|^TCP|^UDP'| wc -l`
port_6_n=`netstat -alntup | grep -E '^tcp6|^udp6' | wc -l` #监听端口
list_port_n=`netstat -ntlpu | egrep -i '^tcp|^udp|^TCP|^UDP'|wc -l` #总端口数
total_n=`netstat -alntup| egrep -i '^tcp|^udp|^TCP|^UDP'|wc -l` #打开文件总数
open_f_num=`lsof | wc -l` #允许打开文件数
limit_total_f_n=`cat /proc/sys/fs/file-max` echo -e "ipv4端口: ${port_4_n:-null}\nipv6端口: ${port_6_n:-null} \n监听端口: ${list_port_n:-null}\n总打开端口数: ${total_n:-null}\n允许最大端口数: 65535\n打开文件总数: ${open_f_num:-null}\n允许打开文件数: ${limit_total_f_n:-null}"
} #系统及基本信息
system_info(){
if cat /proc/version|grep -i centos &>/dev/null;then
system_version='Centos'
elif cat /proc/version|grep -i redhat &>/dev/null;then
system_version='Red hat'
elif cat /proc/version|grep -i debian &>/dev/null;then
system_version='Debian'
elif cat /proc/version|grep -i Ubuntu &>/dev/null;then
system_version='Ubuntu'
elif cat /proc/version|grep -i suse &>/dev/null;then
system_version='Suse'
else
echo "This system Manufacturer : unknown"
fi machine_name=`hostname`
line_n=`w |awk 'NR>2{print $1}'|wc -l `
login_user=`w |awk 'NR>2{print $1}' |sort -r -n |uniq`
ip_address=`ip a|grep -i -A2 'MULTICAST,UP,LOWER_UP' | grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" |grep -E -v "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.255" | head -1 `
System_start_time=`uptime | awk '{print $1}'` #得开机时间
System_uptime=`uptime |awk -F ',' '{print $1}' |sed 's#.*up##g'` #得到运行时常 #系统信息总输出
echo -e "-------------System------------\n"
echo -e "开机时间: ${System_start_time:-null}"
echo -e "运行时间: ${System_uptime:-null}"
echo -e "系统厂商: ${system_version:-null}\n主 机 名: ${machine_name:-null}\nIp 地 址: ${ip_address:-null}\n登录用户: ${login_user:-$USER}\n在线用户数: ${line_n:-null}\n"
} #检测关键文件md5值
Check_file_md5(){
echo -e "-------------File_sum------------\n时间: `date`\n"
#读取文件路径生成MD5保存到临时文件中
first_ctl=0
for file_name in /etc/passwd /etc/group /etc/shadow
do
if [ -f .history_sum.txt ];then
#如果first_ctl变量为1表示为第一次获取md5值
if [ ${first_ctl} -eq 1 ];then
md5sum $file_name >> .history_sum.txt
fi #对比md5值
new_sum=`md5sum $file_name|awk '{printf $1}'`
old_sum=`cat .history_sum.txt |grep ${file_name}|awk '{printf $1}'`
if [ "${new_sum}" == "${old_sum}" ];then
#echo "`date` Check ${file_name} not changed." >> /var/log/message
echo "Check ${file_name} not changed."
else
#echo "`date` Check ${file_name} changed!!!" >> /var/log/message
echo "Check ${file_name} changed!!!"
fi else
#地没有历史文件,创建一个并且把控制变量置1
first_ctl=1
md5sum $file_name >> .history_sum.txt
#echo "`date` Check ${file_name} not changed." >> /var/log/message
echo "Check ${file_name} not changed."
fi
done
echo ""
} main(){
cpu_info
mem_info
io_info
net_info
process_info
port_file_limit
system_info
Check_file_md5
} main
结果



**************************************************************************************************************2021年2月20日脚本结束*****************************************************************************************************************
60天shell脚本计划-5/12-渐入佳境的更多相关文章
- 60天shell脚本计划-12/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月23日 --修改时间:2021年3月27日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
- 60天shell脚本计划-8/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月3日 --修改时间:2021年3月7日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在评 ...
- 60天shell脚本计划-11/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月18日 --修改时间:2021年3月22日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
- 60天shell脚本计划-10/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月13日 --修改时间:2021年3月17日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
- 60天shell脚本计划-9/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月8日 --修改时间:2021年3月12日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在 ...
- 60天shell脚本计划-7/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年2月26日 --修改时间:2021年3月2日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在 ...
- 60天shell脚本计划-6/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年2月21日 --修改时间:2021年2月25日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
- 60天shell脚本计划-4/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年2月11日 --修改时间:2021年2月15日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
- 60天shell脚本计划-3/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年2月6日 --修改时间:2021年2月10日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在 ...
随机推荐
- WEB前端基础之SCC(字体颜色背景-盒子模型)
目录 一:伪元素选择器 1.首字调整>>>:也是一种文档布局的方式 2.在文本的前面通过css动态渲染文本>>>:特殊文本无法选中 3.在文本的后面通过css动态渲 ...
- 「BalkanOI 2018 Day1」Minmaxtree
「BalkanOI 2018 Day1」Minmaxtree 每个点都有一个最大和最小权值的限制. 然后每一个权值的限制都必须要取到. 每个点显然可以直接让他取到最大或最小权值. 可以想到每个点匹配一 ...
- Java8之Stream常用操作方式
哈喽!大家好,我是[学无止境小奇],一位热爱分享各种技术的博主! [学无止境小奇]的创作宗旨:每一条命令都亲自执行过,每一行代码都实际运行过,每一种方法都真实实践过,每一篇文章都良心制作过. [学无止 ...
- 解决死锁之路3 - 常见 SQL 语句的加锁分析 (转)
出处:https://www.aneasystone.com/archives/2017/12/solving-dead-locks-three.html 这篇博客将对一些常见的 SQL 语句进行加锁 ...
- Java基础之Scanner类中next()与nextLine()方法的区别
java中使用Scanner类实现数据输入十分简单方便,Scanner类中next()与nextLine()都可以实现字符串String的获取,所以我们会纠结二者之间的区别. 其实next()与nex ...
- ansible学习(一)
基础概念 ansible是什么? 它是一个"配置管理工具",它是一个"自动化运维工具",如果你没有使用过任何配置管理工具,不要害怕,看完这篇文章,你自然会对an ...
- HttpClient的NoHttpResponse问题
调用第三方接口时会报NoHttpResponse异常,原因是上次的连接已经断掉了,但是客户端并未知道,复用上次连接就报错了,所以要解决这个问题,就是要校验上次链接是否断掉了 1. httpCl ...
- linux计划任务之at
at是单次的计划任务 1.首先安装at yum -y install at 2.开启atd服务 systemctl start atd systemctl enabled atd 3.常用命令 -m ...
- hibernate中的一级缓存与闪照区
首先Hibernate中的一级缓存默认是打开的,并且范围从session创建到session关闭,存储的数据必须是持久态的数据. 1 //从session创建开始,一级缓存也跟着创建 2 Sessio ...
- array_multisort array_merge 排序
前段时间遇到一个排序问题,大致是这样的:$demo = array( 0 => array( 'name' ...