1、大致功能就是找出未在fstab中挂载的磁盘,并发送到云平台告警。
#!/bin/bash source /etc/profile remote_address="http://1.1.1.1:6666" user=xxxx pass=xxxx except_block=("/dev/sr0" "/dev/cdrom" "/dev/dvd") blkid_output=$(blkid -s UUID) all_block=() check_useless() { target=$1 found=0 for item in "${except_block[@]}"; do if [ "$item" == "$target" ]; then found=1 break fi done echo $found } check_block_in_fstab(){ uuid=$1 device=$2 uuid_wc=`grep $uuid /etc/fstab |wc -l` device_wc=`grep $device /etc/fstab|wc -l` appear_counts=$(($uuid_wc + $device_wc)) echo $appear_counts } main(){ while IFS= read -r line; do uuid=$(echo "$line" | awk '{print $2}' | cut -d "=" -f2 | sed 's/"//g') device=$(echo "$line" | awk '{print $1}' | sed 's/://g') found=`check_useless $device` if [ $found -eq 0 ];then check_res=`check_block_in_fstab $uuid $device` if [ $check_res -ne 1 ];then JWT_TOKEN=`curl -s -X POST -d "email=${user}&password=${pass}" "${remote_address}/jwt/api-token-path/"|awk -F '[:"]' '{print $8}'` curl "${remote_address}/receive/ReceiveCustomAlarm/" \ -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $JWT_TOKEN" \ -d "{ \"subject\": \"有磁盘未在fstab中\", \"ip\": \"`hostname -I | cut -d' ' -f1`\", \"hostname\": \"`hostname`\", \"source\": \"服务器\", \"alarm_template_id\": 1, \"alarm_content\": { \"title\": \"有磁盘未在fstab中\", \"msg\": \"${uuid}-${device}\" } }" fi fi done <<< "$blkid_output" }
2、本身这个东西没啥有趣的,但是发现环境变量不一样,每次都能在环境变量上出问题,但是每次解决的方式也不一样,我就记录一下这次的处理方式,供小伙伴的解忧。
2.1)因为脚本用到了blkid这个命令
blkid: /usr/sbin/blkid /usr/share/man/man8/blkid.8.gz
2.2)我看crontab文件的内容,以为不会有什么问题,毕竟手动执行没有问题
cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed
2.3) 然后放到crontab之后,发现命令没有执行,在crontab中的环境变量是
/usr/bin:/bin
2.4)所以需要的命令不在环境变量中,解决方式
2.4.1)使用全路径
2.4.2)引入/etc/profile,加载/etc/profile 文件中的环境变量
标签:bin,uuid,fstab,crontab,问题,device,环境变量 From: https://www.cnblogs.com/bill2014/p/17967520