最初のステップでは、Macがオンラインであることを確認するスクリプトを作成しました(それ以外の場合は起動スクリプトも必要ありません)。端末ではうまく動作します。すべてが期待どおりに実行されます。
夕方23時30分にcron jobで実行したいので、cron jobを作成し、全体のプロセスを記録しました。しかし、ログは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
答え1
あなたはPATH
にいる必要がありますcron
。デフォルト値はであり、PATH=/usr/bin:bin
(少なくとも)/sbin
そこにある必要があります。
#!/bin/bash
export PATH=/usr/local/bin/:/usr/bin:/bin:/usr/sbin:/sbin
...
ping
テストでオプションを少し調整することも検討できます。応答が受信されると(つまり、ホストが目覚めた場合)、-o
シャットダウンが許可されます。依存関係をping
強制的に-W1000
待つ時間の上限です。私のテストでは、最大4秒まで待たなければならずping
、失敗応答を受けるまで14秒を待たなければなりませんでした。
ping -q -c3 -o -W1000 "${MAC}"