execute o crontab como www-data para criar um arquivo com www-data como dono

2

Eu quero executar um comando crontab a cada 5 minutos que executa um script py. O script py inturn gera um arquivo de log com rotação da meia-noite em /var/www/logs/.O diretório de logs tem permissão 777.

O arquivo de log tem rotação de meia-noite e, quando um novo arquivo é criado, ele é criado como proprietário da raiz.Como garantir que a propriedade permaneça como www-data, outros scripts também gravam no mesmo arquivo e a propriedade raiz causa problemas de permissão outros scripts.

Uma maneira é colocar o comando

  

crontab -u www-data -e

Isso funciona bem, mas eu quero manter todos os meus comandos do cron no usuário root.

Eu tentei fazer o mesmo com o sudo, mas ele cria com o root como dono que não é o que eu quero.

    
por shadow0359 24.01.2018 / 12:15

3 respostas

1

Então você quer ter

  • todos os seus crontabs em um só lugar na raiz
  • executa algum código python a cada 5 minutos
  • execute o script com o usuário www-data

Como o su não está disponível para www-data, como discutido nos comentários, é possível usar o sudo, se estiver disponível no sistema. Na página man ele diz

  

sudo, sudoedit - executa um comando como outro usuário

No seu caso, isso significa que você usa

sudo crontab -e

para editar seu crontab como usuário root. Dentro do crontab, prefixar o comando sudo -u www-data python para executar python user do usuário www-data .

*/5 * * * * sudo -u www-data python /my/python/log/script.py
    
por ukos 24.01.2018 / 12:49
1

Mais uma solução alternativa, mas você também pode permitir que seu script seja executado como root e deixe o arquivo ser criado por root . E do que apenas adicionar no final

 && sudo chown www-data <your Log file>

para finalmente transferir a propriedade do arquivo para www-data .

(Se houver mais arquivos do que você provavelmente também está interessado no sinalizador -R para "recursivo" para executar o chown em uma pasta inteira e seu conteúdo)

    
por derHugo 24.01.2018 / 14:28
1
  

Eu quero manter todos os meus comandos do cron no usuário root.

Para manter todos os trabalhos cron (que podem ser executados como vários usuários) em um só lugar, esqueça o comando crontab e edite o crontab do sistema no arquivo /etc/crontab ou adicione seu próprio crontab para o diretório /etc/cron.d . Como você esperava, isso exigirá acesso root.

Esses arquivos se parecem muito com qualquer outro crontabs, mas eles incluem a coluna nome de usuário, então você pode apenas especificar o usuário alvo e não precisa usar sudo ou coisas do tipo.

Lembre-se de que, diferentemente do comando crontab , você está editando diretamente os arquivos de configuração do sistema, para que suas alterações não sejam verificadas depois que você sair do editor. Então, por favor, edite-os com atenção suficiente.

    
por Melebius 24.01.2018 / 15:04