Configurando um cron job que faz um chmod / chown

7

Eu gostaria de configurar um cron job que faz um chmod / chown em um diretório (o diretório dropbox).

Isso funciona quando eu executo os comandos manualmente como:

sudo chown -R $USER ~/Dropbox
sudo chmod -R u+rw ~/Dropbox

Eu tentei convertê-lo em um cron job assim:

10      *       *       *       *       sudo chown -R $USER ~/Dropbox

Mas isso não parece fazer o trabalho.

Como fazer isso?

    
por tvgemert 16.02.2012 / 17:27

5 respostas

7

Você deseja que o seu script cron do root (edite executando sudo crontab -e ) seja:

 55 * * * * /bin/chown -R somename /home/somename/Dropbox && /bin/chmod u+rw /home/somename/Dropbox

Supondo que o usuário tenha o nome somename e que /home/somename/Dropbox seja o caminho completo do seu diretório do Dropbox. Como usuário root, ~ vai para /root .

    
por 16.02.2012 / 19:18
16

sudo deve quase nunca ser usado em tarefas agendadas. Ele espera poder falar com um terminal e requer sinalizações específicas para evitar isso.

Crie sua tarefa cron como raiz (em /etc/crontab - Observe que o formato desse arquivo é um pouco diferente: minute hour mday month wday user command ) em vez disso.
Isso também tem o benefício de trabalhar em sistemas nos quais sudo não está instalado.

    
por 16.02.2012 / 17:43
6

Duas questões:

1) Os caminhos normalmente não são configurados no cron da mesma forma que são quando você efetua login. Tente / usr / bin / sudo / bin / chown ... (ou quaisquer que sejam os caminhos certos para esses programas em seu computador). sistema).

2) sudo normalmente pede sua senha, ou pode não estar feliz correndo não interativamente. Eu sugiro que você coloque os comandos no crontab do root sem o sudo, então os comandos são executados como root.

    
por 16.02.2012 / 17:42
5

Existem vários problemas com o seu crontab:

10 * * * sudo chown -R $USER ~/Dropbox

Os problemas:

  • sudo não deve ser usado aqui; requer entrada de terminal
  • chown deve ser totalmente especificado (por exemplo, /bin/chown )
  • USER como uma variável real pode não existir; alguns sistemas usam LOGNAME
  • ~ (til) só será reconhecido por um shell - um chown vazio não entenderá
  • especificando HOME no crontab do root vai para a casa do root

Eu acho que eu realmente roteiro:

#!/bin/bash

# FILE: /usr/local/bin/myscript

USER=$1
eval chown -R $1 ~$1/Dropbox
eval chmod -R u+rw ~$1/Dropbox

(O eval é necessário para converter ~$1 para ~user e para /home/user .)

Execute este script a partir do crontab do root:

# root's crontab
10 * * * /usr/local/bin/myscript someuser
    
por 16.02.2012 / 19:24
0

Como alternativa, você pode ativar o suporte à ACL e usar o setfacl para obter o mesmo / semelhante resultado.

    
por 21.02.2012 / 23:00