Come eseguire un processo di backup notturno su Snow Leopard Server tramite launchd


2

Ho cercato di configurare un processo di backup notturno sul mio server Mac Mini, e dopo molti googling, scavi e man-page, ho capito che anche quello launchdsembrava essere corretto, e ho provato a configurare il mio file plist . Ho pensato a questo (archiviato in /Library/LaunchDaemons/dk.revealit.NightlyRSyncBackup.plist):

<?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>Label</key>
        <string>dk.revealit.NightlyRSyncBackup</string>
        <key>ProgramArguments</key>
        <array>
                <string>/var/root/run-rsync</string>
        </array>
        <key>LowPriorityIO</key>
        <true/>
        <key>Nice</key>
        <integer>1</integer>
        <key>WorkingDirectory</key>
        <string>/var/root</string>
        <key>RunAtLoad</key>
        <false/>
        <key>StartCalendarInterval</key>
        <dict>
                <key>Hour</key>
                <integer>3</integer>
                <key>Minute</key>
                <integer>15</integer>
        </dict>
</dict>
</plist>

Il problema è che non funziona. Posso caricarlo con launchctl, e appare acceso launchctl listcon lo stato di uscita 0. Ma se controllo i miei file di backup, non vengono aggiornati.

Qualche indizio su cosa sto facendo di sbagliato (supponendo che il mio script di backup funzioni come dovrebbe)?


Cosa contiene / var / root / run-rsync?
Segna il

Risposte:


4

Vengono in mente diverse cose:

  • Hai aspettato durante la notte per l'esecuzione? launchctl loadnon lo farà scadere dalla sequenza - se vuoi farlo funzionare in un momento diverso dalle 3:15, usalo sudo launchctl start dk.revealit.NightlyRSyncBackupdopo che è stato caricato.

  • Lo script run-rsync avvia qualsiasi processo in background o fa tutto in linea? Perché se lo script esce e ci sono ancora processi in background, launchd pensa che qualcosa sia andato storto e uccide i processi in background. Se non vuoi che lo faccia, aggiungi <key>AbandonProcessGroup</key><true/>al .plist.

  • Lo script dipende da PATH, incluse eventuali directory non standard (ad esempio / opt / local / bin o qualcosa del genere)?

Una tecnica di debug utile è aggiungere qualcosa di simile:

<key>StandardOutPath</key>
<string>/var/root/NightlyRSyncBackup.out</string>
<key>StandardErrorPath</key>
<string>/var/root/NightlyRSyncBackup.err</string>

alla .plist e vedere cosa appare in quei file.


A quanto pare, si è verificato un problema con la chiave SSH che non veniva letta correttamente quando eseguito tramite launchd. Il tuo consiglio con StandardOutPath e StandardErrorPath è stato prezioso per trovare quel problema, grazie :)
mikl

2

Una volta risposto a una domanda simile , controlla prima questo:

dal man lanuchctl

Si noti che i file di configurazione per utente (LaunchAgents) devono essere di proprietà dell'utente che li carica. Tutti i daemon di sistema (LaunchDaemons) devono essere di proprietà di root. I file di configurazione non devono essere scrivibili in gruppo o nel mondo. Queste restrizioni sono in vigore per motivi di sicurezza, in quanto la possibilità di scrivere su un file di configurazione launchd consente di specificare quale eseguibile verrà avviato.

Quindi, se il tuo rsync dovrebbe essere visto come root

chown root  /Library/LaunchDaemons/your.plist 
chgrp wheel /Library/LaunchDaemons/your.plist 
chmod 644   /Library/LaunchDaemons/your.plist

e dopo questi:

launchctl load /Library/LaunchDaemons/your.plist

Era un buon consiglio, ma la proprietà / i permessi erano già a posto :)
mikl

domanda di due settimane: non funziona ancora? questo deve essere un problema davvero strano ...
jm666,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.