Come programmare un comando di root da eseguire a intervalli?

1

Ho bisogno di eseguire uno script in intervalli che richiede l'esecuzione di un utente root. Ho creato un plist che chiamerà uno script in ~/bin/test.sh .

user@MBP:~$ ls -lah ~/bin/
-rw-r--r--   1 root       staff   566B Feb  6 23:44 test.plist
-rwxr-xr-x   1 root       staff    51B Feb  6 23:38 test.sh

Ecco i contenuti:

user@MBP:~$ cat ~/bin/test.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.test.script</string>
    <key>ProgramArguments</key>
    <array>
        <string>sh</string>
        <string>/Users/user/bin/test.sh</string>
    </array>
    <key>StartInterval</key>
    <integer>30</integer>
</dict>
</plist>

user@MBP:~$ cat ~/bin/test.sh
#!/bin/sh
cp /Users/user/bin/dummy.txt /etc

Poi ho collegato un link simbolico al plist in /Library/LaunchAgents .

user@MBP:~$ ls -lah /Library/LaunchAgents/
lrwxr-xr-x   1 root  wheel    31B Feb  5 06:28 com.test.script.plist -> /Users/user/bin/test.plist

Ma tutto questo non funziona. Quando guardo /var/logs/system.log , dico solo:

Feb  7 14:42:12 MBP com.apple.launchd.peruser.501[242] (com.test.script'[925]): Exited with code: 1
    
posta mptp 07.02.2013 - 07:47
fonte

3 risposte

1

La pagina man per launchd.plist descrive una chiave UserName richiesta quando si esegue il lavoro come root. Presumibilmente, il valore dovrebbe essere "root".

Non sono un guru, ma questa sembra essere l'unica cosa che ti manca - a meno che gli agenti di lancio non possano essere link simbolici.

    
risposta data 07.02.2013 - 09:29
fonte
0

Quindi, in base a questa risposta SuperUser , devi eseguire launchctl come sudo per mantenere le autorizzazioni

sudo load -w /Library/LaunchDaemons/com.apple.samplelaunchdscript.plist
    
risposta data 07.02.2013 - 11:38
fonte
0

Anche gli elenchi di proprietà in LaunchAgent funzionano, ma devi caricare sia gli agent che i demoni con sudo:

sudo chown root ~/bin/test.plist
sudo launchctl load /Library/LaunchAgents/test.plist

Se il plist non ha una chiave Disabled, viene caricato automaticamente al successivo login o al riavvio, e -w non è necessario.

    
risposta data 07.02.2013 - 12:30
fonte

Leggi altre domande sui tag