Como executar o crontab como usuário: www-data?

24

Meu LAMP está configurado para funcionar como user:www-data e todos os arquivos e pastas são criados com essas permissões.

Eu configurei o crontab como user @ ubuntu.

Então eu faço crontab -e e uso este comando:

*/5 * * * * php /var/www/public/voto_m/artisan top >/dev/null 2>&1

Basicamente, esse comando apenas cria um arquivo de cache no local especificado (sem problemas com isso), mas esse arquivo de cache é criado com user: user permissions não user:www-data permissions.

Como posso fazer isso, por padrão, criar um arquivo com user:www-data permissions?
Eu não posso ir e chown cada vez que o arquivo é recriado.

Obrigado.

    
por arma 15.09.2012 / 21:44

4 respostas

30

Você pode escrever sua entrada no sistema crontab /etc/crontab , que recebe um argumento adicional especificando o usuário para executar como (geralmente root, mas pode ser www-data).

Sua linha se tornaria:

*/5 * * * * www-data php /var/www/public/voto_m/artisan top >/dev/null 2>&1

Ou você pode editar o crontab do usuário www-data com su :

sudo su -c "crontab -e" www-data
    
por mivk 01.11.2012 / 14:44
41

Você também pode executar o crontab com o argumento -u para editar um crontab para um usuário específico:

sudo crontab -u www-data -e
    
por Code Commander 07.09.2013 / 21:09
3

Para executar um crontab como usuário www-data, você pode usar o seguinte comando:

crontab -u www-data -e

Em seguida, você escreve uma linha, por exemplo, para executar um arquivo php a cada 15 minutos:

*/15  *  *  *  * php -f /path_to_cron/cron.php

Ao salvá-lo, você será perguntado pelo editor:

File Name to Write: /tmp/crontab.HMpG7V 

Guarde lá, não se preocupe. crontab -e abre um arquivo em / tmp em vez do crontab real para que ele possa verificar erros no seu novo crontab e evitar que você sobrescreva seu crontab real com esses erros. Se não houver erros, seu crontab real será atualizado. Se crontab-e acabou de escrever diretamente para o seu crontab, então você arriscaria explodir todo o seu crontab.

Para verificar se o seu cronjob é executado, você pode verificar os registros do cron. tipicamente em /var/log/cron.log ou executando o seguinte comando:

crontab -u www-data -l
    
por spacebiker 22.07.2016 / 12:06
-1

Eu gostaria de adicionar outra abordagem. Como outras pessoas mencionaram, Ubuntu (16.04 aqui) e www-data crontab parece não ser confiável (talvez seja uma coisa de segurança?).

De qualquer forma, em nossa empresa, gostamos de ter todos os cronjobs em um servidor facilmente acessíveis, para que você não perca nada. Ao mesmo tempo, não queremos executar tudo (qualquer coisa realmente!) Como root.

Portanto, corremos

sudo crontab -e 

Como você faz normalmente, e então especificamos o comando como

* * * * * /bin/su - www-data -s /bin/bash -c '/path/to/command'

Isso executará / path / to / command como www-data enquanto mantém o cronjob no arquivo cronjobs da raiz (e isso sempre será executado corretamente). Tem o benefício de poder gravar os arquivos de log como root (para máxima segurança) usando pipes.

Note que estamos passando o nosso shell preferido, isso também poderia ser / bin / sh para um shell mais simples (nós apenas gostamos de capacidades completas do bash). O www-data não tem um shell especificado, portanto, você obterá erros sem ele. Normalmente, o cron executa trabalhos apenas com / bin / sh.

    
por Henrik 15.12.2017 / 10:23

Tags