Problemi nella creazione della directory dallo script eseguito da launchd

3

Ho un semplice script che crea una nuova directory in base alla data, quindi copia un set di file in quella directory. Funziona bene da Terminal. Quando lo imposto per l'esecuzione come un utenteAgent fallisce. Il log degli errori mostra che è cambiato in percorsi da /Users/Study/xxx a /var/root/xxx . Ho provato a eseguirlo come root da Terminal e funziona ancora. Ho assicurato che root non è il proprietario del file di script. Ho modificato il mio percorso originale di ~/xxx in /Users/Study/xxx ma per qualche motivo quando lancio da launchd, cambia il percorso. Qualche idea?

script:

!/bin/bash

MO=$(date +%d%B%Y)
mkdir /Users/Study/Dropbox/SPID_backups/$MO
cp -r /Users/Study/WebDevelopment/SPID/*.* /Users/Study/Dropbox/SPID_backups/$MO

launchctl 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>com.spidbackup</string>
    <key>Program</key>
    <string>/Users/Study/Library/Scripts/spidbackup.sh</string>
    <key>StandardErrorPath</key>
    <string>/tmp/com.spidbackup.err</string>
    <key>StandardOutPath</key>
    <string>/tmp/com.spidbackup.out</string>
    <key>StartCalendarInterval</key>
    <array>
        <dict>
            <key>Hour</key>
            <integer>17</integer>
            <key>Minute</key>
            <integer>11</integer>
        </dict>
    </array>
    <key>WorkingDirectory</key>
    <string>/Users/Study</string>
</dict>
</plist>
    
posta Mike 06.11.2016 - 01:23
fonte

2 risposte

1

L'attività di backup è (molto) specifica dell'utente e nessun servizio di sistema, quindi la posizione corretta per l'agente di avvio è ~ / Library / LaunchAgents /. Se inserisci il plist in / Library / LaunchAgents verrà eseguito per conto di tutti gli utenti registrati a ~ 5.11pm - che non riusciranno per la maggior parte degli utenti perché probabilmente non possono accedere ad alcune o alla maggior parte delle tue cartelle / file utente.

Usa uno shebang appropriato nello script #!/bin/bash.. e rendi eseguibile lo script: chmod +x /Users/Study/Library/Scripts/spidbackup.sh .

Rimuovere completamente il plist dal db launchctl con sudo launchctl remove com.spidbackup e launchctl remove com.spidbackup . Sposta il plist in / Users / Study / Library / LaunchAgents /, chown / chmod al tuo utente e rimuovi la chiave WorkingDirectory e la stringa associata.

Infine ricarica l'agente con:

launchctl load /Users/Study/Library/LaunchAgents/com.spidbackup.plist 

Le autorizzazioni / proprietà appropriate per i file sono finalmente:

ls -l /Users/Study/Library/Scripts/spidbackup.sh
-rwxr-xr-x  1 study  staff  ... spidbackup.sh

o

-rwx------  1 study  staff  ... spidbackup.sh

e

ls -l /Users/Study/Library/LaunchAgents/com.spidbackup.plist 
-rw-r--r--  1 study  staff  ... com.spidbackup.plist

supponendo che Studio sia il tuo nome utente.

Controlla anche le lettere maiuscole (ad esempio, lo studio e lo studio).

    
risposta data 06.11.2016 - 02:28
fonte
0

In realtà non ho la risposta, ma era chiaramente qualcosa a che fare con le autorizzazioni e la proprietà. Ho ricominciato con un nuovo file e un nuovo plist. Tutto funziona come previsto. Grazie per tutti i commenti.

    
risposta data 06.11.2016 - 21:23
fonte

Leggi altre domande sui tag