Eu gostaria de configurar um trabalho cron que de forma recusativa execute um chmod / chown em um diretório (o diretório dropbox).
Isso funciona quando executo os comandos manualmente, como:
sudo chown -R $USER ~/Dropbox
sudo chmod -R u+rw ~/Dropbox
Eu tentei convertê-lo em um trabalho cron como este:
10 * * * * sudo chown -R $USER ~/Dropbox
Mas parece não fazer o trabalho.
Como fazer isso?
permissions
cron
mac-osx-server
tvgemert
fonte
fonte
incron
+inotify
Seria soluções mais limpas :)Respostas:
Você deseja que seu script cron raiz (edite executando
sudo crontab -e
) seja:Supondo que o usuário seja nomeado
somename
e esse/home/somename/Dropbox
seja o caminho completo do diretório do Dropbox. Como usuário root, ~ acessa/root
.fonte
$PATH
a definir equivalentes às de um usuário conectado em um cron (por exemplo, no meu linuxbox $ HOME está definido, mas $ PATH está definido para/usr/bin
e/bin
de crontab e US $ USUÁRIO não está definido; portanto, nesse caso, você não precisou especificar/bin
antes do chmod / chown), (b) evitarsudo
nos scripts (executar a tarefa cron comoroot
usuário), (c) como o usuário root$HOME
fará referência a / root e não ao usuário normal , (d)~
deve ser evitado nos scripts cron (por padrão, execute como#!/bin/sh
.find
), etc., faça sentido colocar um script.sudo
quase nunca deve ser usado em tarefas agendadas. Ele espera poder conversar com um terminal e requer sinalizadores específicos para evitar tentar fazê-lo.Crie seu trabalho cron como root (em
/etc/crontab
- Observe que o formato deste arquivo é um pouco diferente :). Isso também tem o benefício de trabalhar em sistemas onde não está instalado.minute hour mday month wday
user
command
sudo
fonte
55 * * * * root chown -R somename ~/Dropbox
somename
poderia estar em qualquer lugar; é um caminho relativo. Em segundo lugar,~
é entendido apenas pelo shell; use$HOME
. Use um comando como este:chown -R /some/path/somename $HOME/Dropbox
(este usarároot
o diretório inicial do ...)somename
não é um caminho, mas o nome de utilizador (e também deve conter o nome do grupo:somename:somegroup
);)~
) é CRITICAMENTE IMPORTANTE - Por favor, dedique algum tempo às páginas do cron e do crontab e verifique se você entende o que está acontecendo (em caso de dúvida) , criar um trabalho cron que fazecho "what you want to do" > /tmp/what-i-would-run
e olhar para os resultados para ter certeza que eles estão sãos -. muita chance menor de destruir o universo)Duas questões:
1) Os caminhos normalmente não são configurados no cron da mesma maneira que quando você faz login. Tente / usr / bin / sudo / bin / chown ... (ou quaisquer que sejam os caminhos corretos para esses programas em seu sistema).
2) sudo normalmente pede sua senha ou pode não ser feliz executando de forma não interativa. Eu sugiro que você coloque os comandos no crontab do root sem o sudo, e os comandos serão executados como root.
fonte
Existem vários problemas com o seu crontab:
As questões:
sudo
não deve ser usado aqui; requer entrada terminalchown
deve ser totalmente especificado (ou seja,/bin/chown
)USER
como uma variável real pode não existir; alguns sistemas usamLOGNAME
~
(til) será reconhecido apenas por uma concha - um nuchown
não a entenderáEu acho que eu realmente scriptá-lo:
(
eval
É necessário converter~$1
para~user
depois para/home/user
).Execute este script a partir do crontab do root:
fonte
Como alternativa, você poderá ativar o suporte à ACL e usar o setfacl para obter o mesmo resultado / similar.
fonte