php rsync com exec () não está funcionando

2

Por que isso:

rsync -avz -e ssh /home/userneme/folder [email protected]:/var/www/folder

funciona a partir do cronjob e isto:

exec("rsync -avz -e ssh /home/userneme/folder [email protected]:/var/www/folder");

não funciona.

Eu sei que exec está funcionando porque eu tenho alguns lugares no meu appp que fazem a conversão de pdf para jpg com o ImageMagick (exec).

RESOLVIDO

exec está funcionando OK, foi um problema de permissão no servidor remoto. O servidor "local" é uma conta de revendedor compartilhada e o servidor remoto é minha primeira caixa VPS Ubuntu 10.10 LAMP. Se eu tivesse um administrador de sistema já que sou apenas um desenvolvedor de software forçado a fazer isso e eu estou fedendo a isso :) Obrigado a todos!

    
por mojeime 18.03.2011 / 14:03

4 respostas

4

Suas chaves ssh devem estar também na pasta inicial do apache. Caso contrário, o rsync não funcionará.

Atenciosamente

    
por 18.03.2011 / 14:09
3

Isso é provavelmente relacionado ao PATH. tente executar o rsync com um caminho completo, por ex.

exec("/usr/bin/rsync -avz -e ssh /home/userneme/folder [email protected]:/var/www/folder");
    
por 18.03.2011 / 14:06
2

Seu host tem safe_mode on?

Execute php -i |grep -i safe . Se o modo de segurança estiver ativado, consulte safe_mode_exec_dir . Se o rsync não estiver em uma das pastas listadas, o PHP não executará isso.

Você pode pedir ao seu host para colocar um link simbólico para o rsync no caminho exec_dir e, em seguida, executá-lo a partir desse local; mas depende de sua política se eles permitirão isso.

    
por 18.03.2011 / 15:44
1

Você deve ser capaz de fazer isso dando ao ssh um arquivo de chave específico para usar na opção -e para o rsync. Já que você está usando um host compartilhado, o que você precisa fazer é criar a chave ssh em algum lugar seguro, então colocar as chaves no host em algum diretório o mais seguro possível (só deve ser legível por você e pelo apache, mas se qualquer outra pessoa sabe sobre isso, eles podem usar um script PHP ou qualquer outra coisa para ter o apache enviando sua chave para eles. Se o seu host usa suexec para scripts para que todos sejam executados sob seu nome de usuário, você pode torná-lo legível apenas por você. p>

Então você usaria

rsync -avz -e "ssh -i /some/id_?sa_key" /home/userneme/folder [email protected]:/var/www/folder

Como isso não é muito seguro, você deve configurar o arquivo de chaves autorizadas do lado remoto para forçar um comando que, no mínimo, verifique se o comando que está sendo executado é "rsync".

Mais sobre como automatizar o rsync (incluindo um script para verificar o comando ssh) aqui .

    
por 18.03.2011 / 15:43

Tags