Shell Scripts

startCrond.sh(2021-11-07)

最近這幾天,莫名地用盡Youtube Data API的配額,只能手動把crond停止,然後在指定的時間,再重啟。
等待倒數計時器,手動重啟,別有樂趣,只是忙起來的時候,就……
於是,寫一個簡單的Shell Script,配合nohup來重啟crond,就不怕分身乏術。
以 vi startCrond.sh 建立一個startCrond.sh,內容如下:
#!/usr/bin/bash
sleep 15h
/usr/bin/systemctl start crond

儲存後,以 chmod 755 ./startCrond.sh 變更檔案的相關執行權限,再以 nonup ./startCrond.sh & 背景執行並且登出後仍執行之。

補充說明:

  1. sleep 後面接的15h,表示等15小時。如果需要以分鐘為單位,則把h改為m,如果以天為單位,則使用d,預設為秒,也就是s,如果省略,就是以秒為單位。
  2. /usr/bin/systemctl start crond 為centos系列的方法,如果其他發行的版本,請依該發行版本調整之。

check_wifi_connection.sh(2020-10-26)

樹莓派2B或3B的wifi連線不穩定,以此來強化連接。可搭配root的crontab來使用,若wifi介面斷線,則重新連線,10秒後,如果無法重新連線,則重新開機。當然啦,如果一直連結不上的話,就會陷入無限重新開機的循環!因此,設定crontab時,參數一定要小心,或是把下面程式碼的sleep 10增加到可以手動控制,即使要無限重新開機,也可以手動排除。
#!/bin/bash
NOW=`date "+%Y-%m-%d %H:%M:%S"`
HOST=`hostname`
wlan0=`cat /sys/class/net/wlan0/operstate`
down="down"

if [ "$wlan0" == "$down" ]; then
    ip link set wlan0 down
    ip link set wlan0 up
    /sbin/wpa_cli -i wlan0 select_network 0
    MSG="${NOW}: restart wlan0"
    echo "$MSG"
    sleep 10
    wlan0again=`cat /sys/class/net/wlan0/operstate`
    if [ "$wlan0again" == "$down" ]; then
        MSG="${NOW}: reboot ${HOST}"
        echo "$MSG"
        /sbin/shutdown -r now
    else
        echo "${NOW}: wlan0 is ok"
    fi
else
    echo "${NOW}: wlan0 is ok"
fi

shrink_dir_logs.sh(2020-10-24)

把指定目錄下所有紀錄檔加上時戳後,7z以四核心最高壓縮方式壓縮為以該日命名的壓縮檔且在壓縮之後,刪除已經壓縮的檔案,如下程式碼:
#!/bin/bash
NOW=`date "+%Y-%m-%d_%H-%M-%S"`
TODAY=`date "+%Y-%m-%d"`
for LOGFILE in "$1"/*.log
do
  CMD="mv ${LOGFILE} ${LOGFILE}_${NOW}"
  echo "$CMD"
  $CMD
done
ZIP="7z a $1/${TODAY}.7z $1/*.log_${NOW} -mx9 -mmt=4 -sdel"
echo "$ZIP"
$ZIP
注意:請先安裝7z,安裝方式請查閱各作業系統。
使用方式: ./shrink_dir_logs.sh /home/user/logs

fnts_dir.sh(2020-10-24)

使用script來幫指定目錄下所有檔案加上時戳,如下程式碼:
#!/bin/bash
NOW=`date "+%Y-%m-%d_%H-%M-%S"`
for LOGFILE in "$1"/*
do
  #echo "$LOGFILE"
  CMD="mv ${LOGFILE} ${LOGFILE}_${NOW}"
  echo "$CMD"
  $CMD
done
使用方式: ./fnts_dir.sh /var/logs

fnts.sh(2020-10-24)

使用script來幫檔案加上時戳,就很簡單的四行程式碼:
#!/bin/bash
NOW=`date "+%Y-%m-%d_%H-%M-%S"`
CMD="mv $1 $1$_{NOW}"
$CMD
使用方式: ./fnts.sh fileToTimeStamp.log

樹莓派記錄溫度(175 bytes,2019-06-24)

(參考樂園日記2019-06-26)使用時,記得使用轉向符號,轉入到指定的目錄檔案即可或是於/etc/rc.local呼叫,如下範例:
./status.sh >> /home/pi/status.log &
#!/bin/bash
while true
do
	dt=`date "+%Y-%m-%d %H:%M:%S"`
	echo ${dt}
	cat /sys/class/thermal/thermal_zone0/temp
	top -n1 | awk '/Cpu\(s\):/ {print $2}'
	sleep 30
done
 
上述程式碼,使用http://hilite.me/來渲染python的關鍵字,再根據dark style調整部分的顏色。