Тож у мене є цей сценарій для відключення Macs після 24 годин виконання.
#!/bin/bash
my_macs=( Mac1 Mac2 Mac3 )
MAX_UPDAYS=1
CURR_TIME=$(date +%s)
MAX_UPTIME=$(( MAX_UPDAYS * 86400 ))
ADMINUSER="pcpatch"
echo "Remote Shutdown Check vom $(date)" | tee -a /Users/admin/Shutdown/Log/Shutdown 2>&1
for MAC in "${my_macs[@]}"
do
echo -n "Überprüfe ${MAC}... "
if /sbin/ping -q -c3 "${MAC}" >/dev/null; then
echo "${MAC} ist angeschaltet. Laufzeit wird ermittelt... "
BOOT_TIME=0
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!"
ssh "${ADMINUSER}@${MAC}" 'sudo /sbin/shutdown -h now'
else
echo "${MAC} ist noch keine 24 Stunden online. Shutdown wird abgebrochen!"
fi
else
echo "${MAC} ist nicht erreichbar (Ping fehlgeschlagen)"
fi
done | tee -a /Users/pcpatch/Shutdown/Log/Shutdown 2>&1
echo " " | tee -a /Users/pcpatch/Shutdown/Log/Shutdown 2>&1
Коли я запускаю його через термінал, він працює нормально, Маки, які працюють в мережі більше 24 годин, вимикаються, все інше нічого не робить.
Поки що добре, але я хочу запускати цей сценарій через кронштейн щодня о 23:00. Тому я зробив цю кронічну роботу:
00 23 * * * /Users/admin/Shutdown/Shutdown.sh
Тепер сценарій працює щодня, сама лінія cron працює. Незважаючи на те, що Macs не вимикається, журнал просто говорить про те, що Macs не працював більше 24 годин. Хоча я часто маю Mac, які працюють більше 3-4 днів.
Хтось знає, як вирішити цю проблему?
Редагувати: Я додав $BOOT_TIME
і $CURR_TIME
до журналу, і він видає щось таке: 1492549200
як CURR_TIME
і нічого BOOT_TIME
, хоча Mac, безумовно, працює, як він зараз (6 днів в Інтернеті). Цей Mac має OSX Sierra, але інший Mac (з OS X El Capitan) поставлений BOOT_TIME
як 1492505076
і CURR_TIME
як1492549200
Я дійсно не знаю, що може означати це число, хоча ...
BOOT_TIME
це не встановлюється, тому що ssh
(мовчки) виходить з ладу. Ви працюєте з тим самим користувачем, як і через термінал? Або належить cronjob, root
але ви вручну запускаєте його як користувач адміністратора?
sudo crontab -e
, так що я вважаю, що це має бути запущеним, оскільки root
я пробував це з різними користувачами через термінал, хоча вони обидва працювали (мій власний адміністратор та команда sudo)
$BOOT_TIME
,$CURR_TIME
і інші значення інтересу, а потім повернутися> 24h пізніше і додати значення до цього питання.