De que contexto é executada uma tarefa cron?

4

Estou fazendo esta pergunta depois de ter destruído uma caixa Linux. V v v v v v v v v v v v v v v v v v v v v v v v v v es

Eu tenho atualmente (bem ...) uma caixa RedHat Linux rodando o Apache com o Phusion Passenger adicionado para rodar o Ruby Apps no Apache. O aplicativo atua como um serviço para servir arquivos em cache para quiosques na área de Cincinnati em uma base regular. O aplicativo da Web funcionou muito bem e a única parte restante foi configurar uma tarefa Cron para recuperar todas as informações que precisavam ser armazenadas em cache e empacotá-las em alguns pacotes de atualização diferentes para veiculação nos quiosques. V vvvvvvvvBvvBvBvBesvBesvvv v vvBes v vvvBes v vvvBesvesvesvesvesvvvvvv es eseses eses eseseses eses eses eses esesBes eseses Es vvBvBvBvBvBvBvBvv esvBesv esvv esvBes eses ves eses eses eses eses es es es es es es es es es es es es es v BBes es es eses O script ficou assim:

#!/bin/bash

cd ../lib
ruby pdf_cache.rb
ruby pdf_prepare.rb
ruby rss_cache.rb
ruby nightly-pack.rb 
cd ..
chown -R www.www *
es vv vv v vv v vv v vv vv v vv v vv v vv v vv v vv v v v v v v es v ves es v es eses eses eses
.
|-- cron
|-- feeds
|-- lib
|   '-- trash
|-- logs
|-- nightly-packs
|-- pdf
|   '-- tank
|-- public
'-- tmp

e eu corri crontab -e as root com o seguinte conteúdo:

0 3 * * * /usr/local/apache2/ruby_projects/kiosk/cron/schedule_job

Que deve executar o script todos os dias às 3 da manhã. B v v Besves v v v v vv vv ves vves v ves eses vvv vv vveses esesves v B v es A tarefa cron foi executada na raiz e presumo que a maioria dos comandos falhou, com exceção de chmod -R www.www * , que alterou a propriedade de tudo no sistema para o www user.

Minha pergunta é; es v B B B B B es Percebo agora que provavelmente não deveria estar executando isso na conta root , e não tenho certeza de como executá-lo na conta www , pois esse usuário não tem shell e você não consegue su com êxito www user.

    
por John 12.04.2011 / 00:48

3 respostas

2

Eu aposto que você poderia apenas dar ao usuário um shell, apenas limitar a capacidade de acessá-lo remotamente e suas permissões.

As tarefas Cron são executadas sob os usuários que fizeram a tarefa Cron, e é por isso que ela é executada como root .

    
por 12.04.2011 / 00:55
3

Outra sugestão: adicione -e à linha shebang em scripts como esse (por exemplo, #!/bin/bash -e ). Isso fará com que o script seja encerrado se algum comando falhar. Isso não garante que você não terá surpresas desagradáveis, mas evitará que o script seja executado completamente fora dos trilhos (por assim dizer) e evitará muitos tipos de falhas de reação em cadeia.

    
por 12.04.2011 / 05:02
0

A maneira correta de fazer isso é 'su -', configure seu cronjob como este usuário. Em seguida, ele será executado como este usuário. Ou, dependendo do que daemon do cron você está usando, pode ter um 6º campo para definir o usuário.

Espero que isso ajude. Existem outros hacks, mas você sempre é mais bem atendido ao fazê-lo funcionar corretamente.

    
por 04.06.2015 / 18:28