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

32

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

Eu configurei o crontab como usuário @ ubuntu.

Então eu faço crontab -ee 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), mas esse arquivo de cache é criado com o usuário: permissões de usuário, não user:www-datapermissões.

Como posso fazer que, por padrão, crie um arquivo com user:www-datapermissões?
Não posso ir e chowncada vez que o arquivo é recriado.

Obrigado.

arma
fonte
Observe que alguns scripts crontab executados como www-data (por exemplo awstats, para ou php5sessionclean) estão localizados em /etc/cron.*diretórios e, portanto, não são visíveis através crontab -e(mesmo ao especificar o usuário www-data ).
Skippy le Grand Gourou

Respostas:

40

Você pode escrever sua entrada no sistema crontab /etc/crontab, que utiliza 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
mivk
fonte
1
realmente segunda opção não funciona na maioria das versões do Ubuntu
user123
A segunda opção funciona para mim em 12.04LTS. Talvez não nas versões posteriores?
mivk
1
segunda opção não está funcionando no 14.04
dgoosens
Para facilitar o gerenciamento, a linha também pode ser colocado em seu próprio arquivo no /etc/cron.dcom um nome descritivo, por exemplo , /etc/cron.d/artisan.
fkraiem
2
Para a segunda opção, tente isso em vez dissosudo su -c "crontab -e" www-data -s /bin/bash
Lunfel 13/06
51

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

sudo crontab -u www-data -e
Code Commander
fonte
isso funciona em 14.04
dgoosens
3

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

crontab -u www-data -e

Então 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á solicitado pelo editor:

File Name to Write: /tmp/crontab.HMpG7V 

Salve lá, não se preocupe. crontab -eabre um arquivo em / tmp em vez do crontab real, para que ele possa verificar se há erros no seu novo crontab e impedir que você substitua seu crontab real por esses erros. Se não houver erros, seu crontab atual será atualizado. Se o crontab -e apenas escrevesse diretamente para o seu crontab real, você correria o risco de explodir todo o seu crontab.

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

crontab -u www-data -l
spacebiker
fonte
Este trabalhou para mim no Ubuntu
tristanbailey
Isso foi respondido anteriormente corretamente e de forma mais concisa pelo comandante de código acima de 4 anos atrás. Você omitiu o uso de "sudo". e lançou informações não solicitadas sobre o formato da linha cron.
HörmannHH
@RichieHH, Por que devo adicionar o sudo? Quem disse que o usuário ainda não está executando como root? Qualquer pessoa que use esse comando deve ter conhecimento suficiente para saber que, se precisar executar o comando com privilégios, será necessário executá-lo com o sudo; caso contrário, é melhor não tocar em .. e você diz de forma mais concisa ...? comandante de código digitou o comando mas não deu mais informações
spacebiker
.. se você é inteligente, é melhor começar a dar respostas em vez de criticar o trabalho dos outros, talvez então comece a ganhar reputação
spacebiker
-1

Eu gostaria de adicionar outra abordagem. Como outras pessoas mencionaram, o Ubuntu (16.04 aqui) e o www-data crontab parecem não confiáveis ​​(talvez seja uma questão 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 (realmente nada!) Como root.

Por isso, corremos

sudo crontab -e 

Como você normalmente faz, e depois especificamos o comando como

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

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

Observe que estamos passando nosso shell preferido, isso também pode ser / bin / sh para um shell mais simples (apenas gostamos dos recursos completos do bash). Www-data não possui um shell especificado, portanto você receberá erros sem ele. Normalmente, o cron executa tarefas apenas com / bin / sh.

Henrik
fonte