Crontab은 여러 Mac 컴퓨터에 연결할 수 없습니까?

Crontab은 여러 Mac 컴퓨터에 연결할 수 없습니까?

첫 번째 단계는 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}"

관련 정보