¿Cómo programo un comando raíz para que se ejecute a intervalos?

1

Necesito ejecutar un script en intervalos que requiera la ejecución de un usuario root. Creé una lista que llamará a un script en ~/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

Aquí están los contenidos:

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

Luego hice un enlace simbólico con el plist en /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

Pero todo esto no funciona. Cuando miro a /var/logs/system.log solo digo:

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

3 respuestas

1

La página del manual para launchd.plist describe una clave UserName que se requiere cuando se ejecuta el trabajo como root. Presumiblemente, el valor debe ser "raíz".

No soy un gurú, pero parece que esto es lo único que te falta, a menos que los agentes de lanzamiento no puedan tener un enlace simbólico.

    
respondido por el Tyler Wayne 07.02.2013 - 09:29
0

Entonces, de acuerdo con esta respuesta del Superusuario , tienes que ejecutar launchctl como sudo para conservar los permisos

sudo load -w /Library/LaunchDaemons/com.apple.samplelaunchdscript.plist
    
respondido por el nuc 07.02.2013 - 11:38
0

Las listas de propiedades en LaunchAgents también funcionan, pero tienes que cargar agentes y demonios con sudo:

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

Si el plist no tiene una clave deshabilitada, se carga automáticamente en el próximo inicio de sesión o reinicio, y no es necesario -w.

    
respondido por el user495470 07.02.2013 - 12:30

Lea otras preguntas en las etiquetas