Vì vậy, tôi có tập lệnh này để tắt máy Mac sau 24 giờ chạy.
#!/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
Khi tôi chạy nó qua thiết bị đầu cuối, nó hoạt động tốt, máy Mac trực tuyến đã tắt hơn 24 giờ, mọi thứ khác không làm gì cả.
Cho đến nay rất tốt, nhưng tôi muốn chạy kịch bản này thông qua một cronjob hàng ngày lúc 23:00 giờ. Vì vậy, tôi đã thực hiện cronjob này:
00 23 * * * /Users/admin/Shutdown/Shutdown.sh
Bây giờ kịch bản chạy hàng ngày, dòng cron tự hoạt động. Các máy Mac sẽ không tắt máy và nhật ký chỉ nói rằng các máy Mac không chạy quá 24 giờ. Mặc dù tôi thường xuyên có máy Mac chạy hơn 3-4 ngày.
Có ai biết làm thế nào để giải quyết vấn đề này?
Chỉnh sửa: Tôi đã thêm $BOOT_TIME
và $CURR_TIME
vào nhật ký, và nó đưa ra một cái gì đó như thế này: 1492549200
như CURR_TIME
và không có gì là BOOT_TIME
, mặc dù Mac chắc chắn đã chạy, vì anh ấy đang ở ngay bây giờ (6 ngày trực tuyến). Máy Mac này đã cài đặt OSX Sierra và một máy Mac khác (với OS X El Capitan) được đặt BOOT_TIME
như 1492505076
và CURR_TIME
như 1492549200
Tôi thực sự không biết những con số này có nghĩa là gì mặc dù ...
BOOT_TIME
không được thiết lập vì ssh
(âm thầm) thất bại. Bạn có đang chạy cronjob từ cùng một người dùng như bạn làm thông qua Terminal không? Hoặc cronjob thuộc về root
nhưng bạn tự chạy nó như một người dùng quản trị?
sudo crontab -e
, vì vậy tôi cho rằng nó nên được chạy như root
Tôi đã thử nó với những người dùng khác thông qua thiết bị đầu cuối và cả hai đều hoạt động (quản trị viên của riêng tôi và với lệnh sudo)
$BOOT_TIME
,$CURR_TIME
và các giá trị quan tâm khác, sau đó quay lại & gt; 24h sau đó và thêm các giá trị cho câu hỏi.