Estoy intentando ejecutar mi script de copia de seguridad personalizado a través de rsnapshot. Simplemente clona un repositorio git determinado en el directorio de trabajo actual. Funciona bien cuando se ejecuta sin rsnapshot.
/etc/rsnapshot.config:
backup_script /usr/local/bin/gitbackup.py -r https://foo.bar/myrepo.git -u username -f /root/.pwd git/myrepo.git/
Esto crea un directorio con un .git debajo de myrepo/.git en la ubicación de la copia de seguridad y un error:
# rsnapshot -v daily
[...]
error: could not lock config file /var/cache/rsnapshot/tmp/myrepo/.git/config: No such file or directory
fatal: could not set 'remote.origin.fetch' to '+refs/heads/*:refs/remotes/origin/*'
Tanto el usuario de rsnapshot como el root obtuvieron un ~/.gitconfig en sus directorios de inicio.
También intenté ejecutarlo con sudo. Esto resulta en:
Cloning into 'myrepo'...
/bin/rm -rf /var/cache/rsnapshot/tmp/
/bin/rm: cannot remove '/var/cache/rsnapshot/tmp/myrepo/.git': Directory not empty
----------------------------------------------------------------------------
rsnapshot encountered an error! The program was invoked with these options:
/usr/bin/rsnapshot -v daily
----------------------------------------------------------------------------
ERROR: Warning! /bin/rm failed.
ERROR: Could not rm_rf("/var/cache/rsnapshot/tmp/");
rm -f /var/run/rsnapshot.pid
fatal: remote-curl: fetch attempted without a local repo
¿Alguna idea de qué está pasando? ¿Quizás sea necesario configurar algunas variables de entorno para git?
Respuesta1
El problema era un directorio de trabajo no especificado. Aparentemente, rsnapshot se usa /var/cache/rsnapshot/tmp/
de forma predeterminada y /var/cache/rsnapshot
solo el usuario de rsnapshot puede leerlo y escribirlo (mientras que backup_script se ejecuta como root).
Mi secuencia de comandos de respaldo ahora cambia el directorio de trabajo, se registra /home/rsnapshot/git_backup
y se realiza una copia de seguridad de este directorio usando una backup
directiva normal.
backup_script /usr/local/bin/gitbackup.py -r https://foo.bar/myrepo.git -u username -f /root/.pwd -w /home/rsnapshot/git_backup git_tmp/myrepo.git/
backup /home/rsnapshot/git_backup/ localhost_git/
Ahora tengo el problema de que los pagos sincronizados (no los clonados) a continuación /var/cache/rsnapshot/daily.0/localhost_git
solo contienen un ~/.git
directorio y nada más, pero ese es un problema diferente.