Suas chaves ssh devem estar também na pasta inicial do apache. Caso contrário, o rsync não funcionará.
Atenciosamente
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!
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");
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.
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 .