Me gustaría configurar un trabajo cron que recusivamente haga un chmod / chown en un directorio (el directorio de dropbox).
Esto funciona cuando ejecuto los comandos manualmente como:
sudo chown -R $USER ~/Dropbox
sudo chmod -R u+rw ~/Dropbox
Traté de convertirlo en un trabajo cron como este:
10 * * * * sudo chown -R $USER ~/Dropbox
Pero no parece hacer el trabajo.
¿Como hacer esto?
permissions
cron
mac-osx-server
tvgemert
fuente
fuente
incron
+inotify
serían soluciones más limpias :)Respuestas:
Desea que su script cron raíz (edite ejecutando
sudo crontab -e
) sea:Suponiendo que se nombra al usuario
somename
y esa/home/somename/Dropbox
es la ruta completa de su directorio de Dropbox. Como usuario root, ~ va a/root
.fuente
$PATH
se definan como equivalentes a las de un usuario que ha iniciado sesión en un cronjob (por ejemplo, en mi linuxbox $ HOME está definido, pero $ PATH está configurado para/usr/bin
y/bin
desde crontab y $ USER no está definido; por lo tanto, en este caso no fue necesario especificar/bin
antes de chmod / chown), (b) evitarsudo
en los scripts (ejecutar la tarea cron comoroot
usuario), (c) ya que el usuario raíz$HOME
se referirá a / root no a su usuario normal , (d)~
debe evitarse en los scripts cron (por defecto se ejecuta como#!/bin/sh
.find
), etc., entonces tiene sentido incluir un script.sudo
debe casi nunca se puede utilizar en las tareas programadas. Espera poder hablar con un terminal, y requiere indicadores específicos para evitar intentar hacerlo.Cree su trabajo cron como root (en
/etc/crontab
- Tenga en cuenta que el formato de este archivo es ligeramente diferente:) en su lugar. Esto también tiene la ventaja de trabajar en sistemas donde no está instalado.minute hour mday month wday
user
command
sudo
fuente
55 * * * * root chown -R somename ~/Dropbox
somename
podría estar en cualquier parte; Es un camino relativo. En segundo lugar,~
solo se entiende por el caparazón; uso$HOME
. Use un comando como este:chown -R /some/path/somename $HOME/Dropbox
(esto usarároot
el directorio de inicio de ...)somename
no es una ruta, sino el nombre de usuario (y también debe contener el nombre del gruposomename:somegroup
~
) es CRÍTICAMENTE IMPORTANTE : pase un tiempo con las páginas de manual de cron y crontab y asegúrese de comprender lo que está sucediendo (si tiene dudas , crear una tarea programada que haceecho "what you want to do" > /tmp/what-i-would-run
y la mirada a los resultados para asegurarse de que están en su sano juicio -. probabilidad mucho menor de destruir el universo)Dos cuestiones:
1) Las rutas normalmente no están configuradas en cron de la misma manera que cuando inicias sesión. Prueba / usr / bin / sudo / bin / chown ... (o cualesquiera que sean las rutas correctas para esos programas en tu sistema).
2) sudo normalmente le pide su contraseña, o de lo contrario puede no estar contento corriendo de manera no interactiva. Le sugiero que coloque los comandos en el crontab de la raíz sin el sudo en su lugar, luego los comandos se ejecutan como raíz.
fuente
Hay múltiples problemas con su crontab:
Los problemas:
sudo
no debe usarse aquí; requiere entrada de terminalchown
debe especificarse completamente (es decir,/bin/chown
)USER
como una variable real puede no existir; algunos sistemas usanLOGNAME
~
(tilde) solo será reconocido por un caparazón; un desnudochown
no lo entenderáCreo que realmente lo escribiría:
(Se
eval
necesita para convertir~$1
a~user
luego a/home/user
).Ejecute este script desde el crontab de root:
fuente
Como alternativa, es posible que pueda habilitar la compatibilidad con ACL y usar setfacl para lograr el mismo resultado / similar.
fuente