1 votos

El script de apagado no funciona como un cronjob

Así que tengo este script para el apagado de Mac después de 24 horas de tiempo de ejecución.

#!/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

Cuando lo ejecuto a través de la terminal funciona bien, los Mac que están en línea más de 24 horas de cerrar, todo lo demás no hace nada.

Hasta ahí todo bien, pero quiero ejecutar esta secuencia de comandos a través de un cronjob todos los días a las 23:00 horas. Así que he hecho este cronjob:

00 23 * * * /Users/admin/Shutdown/Shutdown.sh

Ahora, el script se ejecuta todos los días, el cron de la línea en sí funciona. Los Macs no apagado y aunque el registro dice que los Macs no ejecutar más de 24 horas. A pesar de que con frecuencia tienen los Mac que ejecutan más de 3-4 días.

¿Alguien sabe cómo solucionar este problema?

Edit: he añadido $BOOT_TIME y $CURR_TIME a la de registro, y se da somehing como esto: 1492549200 como CURR_TIME y nada como el BOOT_TIME, a pesar de que el Mac era definitivamente en ejecución, como es ahora (6 días en línea). Este Mac OSX Sierra instalado y aunque otro Mac (con OS X El Capitan) poner BOOT_TIME como 1492505076 y CURR_TIME como 1492549200

Yo realmente no sé lo que estas cifras podrían significar, aunque...

1voto

klanomath Puntos 19587

El script no obtiene el BOOT_TIME de los hosts remotos correctamente en el cron medio ambiente.

Recomiendo quitar el cronjob y crear un lanzamiento agente de usr.remoteshutdown.plist en lugar de en /Users/admin/Library/LaunchAgents/ con el siguiente contenido:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <false/>
    <key>Label</key>
    <string>usr.remoteshutdown</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/bash</string>
        <string>/Users/admin/Shutdown/sh/remoteshutdown.sh</string>
    </array>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>23</integer>
        <key>Minute</key>
        <integer>0</integer>
    </dict>
</dict>
</plist>

A continuación, cargar el lanzamiento del agente al entrar en la Terminal.aplicación:

launchctl load /Users/admin/Library/LaunchAgents/usr.remoteshutdown.plist

Por favor, ajuste el (admin) nombre de usuario y el nombre y la ubicación de la secuencia de comandos de apagado en el plist.


Para probar esto, usted no tiene que esperar 24 horas. Simplemente

  • quitar el sudo en la secuencia de comandos de shell temporalmente
  • comentario la línea ssh "${ADMINUSER}@${MAC}" 'sudo /sbin/shutdown -h now'
  • comentario la ssh ... shutdown -h now línea e insertar una línea echo "Boot: ${BOOT_TIME}"
  • echo el ssh ... shutdown -h now línea (en lugar de ejecutarlo)

A continuación, modificar StartCalenderInterval en el lanzamiento del agente a un punto de tiempo en el futuro cercano (tiempo actual +3 minutos). Descarga y carga el plist con:

launchctl unload /Users/admin/Library/LaunchAgents/usr.remoteshutdown.plist
launchctl load /Users/admin/Library/LaunchAgents/usr.remoteshutdown.plist

La secuencia de comandos de shell SSH requiere clave de autenticación basada en formularios y que el admin tiene una línea especial en el sudoers archivos de los hosts remotos para permitir sudo shutdown ... sin introducir contraseñas!

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X