Osx

Crontab 無法訪問多個 Mac?

  • February 14, 2017

我製作了一個腳本,第一步是檢查 Mac 是否線上(否則甚至不需要啟動腳本)。在終端中它工作得非常好:一切都按預期執行。

我想在晚上 23:30 通過 cron 作業執行它,所以我創建了一個 cron 作業並記錄了整個事情。然而,日誌顯示 Mac 的 Ping 失敗,但它們肯定是線上的。

有什麼想法可能導致這種情況嗎?

這是腳本本身:

#!/bin/bash

#Array of Mac hostnames separated by spaces
my_macs=( Mac111 Mac121 Mac122 Mac123 Mac124 Mac126 Mac127 Mac128 Mac129 )

# Number of days the remote Mac is allowed to be up
MAX_UPDAYS=1

CURR_TIME=$(date +%s)
MAX_UPTIME=$(( MAX_UPDAYS * 86400 ))
ADMINUSER="pcpatch"

#Steps through each hostname and issues SSH command to that host
#Loops through the elements of the Array

echo "Remote Shutdown Check vom $(date)" >> /Users/pcpatch/desktop/shutdown/Log/remoteshutdown.log
for MAC in "${my_macs[@]}"
do
   echo -n "Überprüfe ${MAC}... " >> /Users/pcpatch/desktop/shutdown/Log/remoteshutdown.log
   # -q quiet
   # -c nb of pings to perform

   if ping -q -c3 "${MAC}" >/dev/null; then
       echo "${MAC} ist angeschaltet. Laufzeit wird ermittelt... " >> /Users/pcpatch/desktop/shutdown/Log/remoteshutdown.log

       BOOT_TIME=0
       # Get time of boot from remote Mac
       BOOT_TIME=$(ssh "${ADMINUSER}@${MAC}" sysctl -n kern.boottime | sed -e 's/.* sec = \([0-9]*\).*/\1/')

       if [ "$BOOT_TIME" -gt 0 ] && [ $(( CURR_TIME - BOOT_TIME )) -ge $MAX_UPTIME ]; then
           echo "${MAC} ist über 24 Stunden online. Shutdown wird ausgeführt!" >> /Users/pcpatch/desktop/shutdown/Log/remoteshutdown.log
           ssh "${ADMINUSER}@${MAC}" 'sudo /sbin/shutdown -h now'
       else
           echo "${MAC} ist noch keine 24 Stunden online. Shutdown wird abgebrochen!" >> /Users/pcpatch/desktop/shutdown/Log/remoteshutdown.log
       fi

   else
       echo "${MAC} ist nicht erreicbar Ping (Ping fehlgeschlagen)" >> /Users/pcpatch/desktop/shutdown/Log/remoteshutdown.log
   fi
done

在 cron 工作中,我寫道:

30 23 * * * /User/myuser/Shutdown/Shutdown.sh

您需要為PATH要在cron. 預設是PATH=/usr/bin:bin,你需要(至少)/sbin在那裡。

#!/bin/bash
export PATH=/usr/local/bin/:/usr/bin:/bin:/usr/sbin:/sbin
...

您還可以考慮ping稍微調整測試中的選項。一旦收到一個響應(即主機醒著),它就允許-o退出。ping強制設置等待依賴的-W1000時間上限。在我的測試中,這導致ping最多等待四秒鐘;沒有它,我必須等待 14 秒才能獲得失敗響應:

ping -q -c3 -o -W1000 "${MAC}"

引用自:https://unix.stackexchange.com/questions/344842