¿Hay un comando bash para verificar si la máquina de tiempo ha terminado de hacer una copia de seguridad?
-
16-10-2019 - |
Pregunta
Estoy escribiendo un script que RSYCNC My Time Machine Directory a un servidor remoto usando SSH. He cambiado de un script de shell a un Applecript y luego a un script de Apple y realmente no me importa qué tipo de script requerirá la solución.
He tenido éxito comenzando el proceso de copia de seguridad con este pequeño fragmento de código.
do shell script "/System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper >/dev/null 2>&1 &"
Lo que estoy tratando de hacer ahora es tener un comando RSYNC realizado una vez que se complete esa copia de seguridad. ¿Hay alguna forma limpia en AppleScript para verificar si el proceso de copia de seguridad se completa? ¿O hay un buen "gancho" que pueda usar en Bash para verificar si está completado?
Solución
Aquí hay una forma: sé que no está cerca de una solución "adecuada", pero imagino que funcionaría.
ps ax | grep "/System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper" | grep -v 'grep'
Lo que hace es buscar en la lista de procesos para el proceso BackUpD-Helper, luego filtra el comando GREP en sí mismo para que aparezca. Si el comando devuelve> 0 resultados, el proceso de backupd-helper aún está activo. Si no, el proceso ha terminado, por lo que puede suponer que está hecho.
Otros consejos
tmutil status
es el camino del león ahora que tenemos una buena herramienta para este tipo de consulta.
También puede comenzar la copia de seguridad con tmutil startbackup -b
. -b
Bloquea el comando hasta que la copia de seguridad haya terminado.
La ausencia de procesos relacionados con la copia de seguridad es no Se asegura que se complete una copia de seguridad de la máquina del tiempo
En el volumen al que la máquina del tiempo escribe sus copias de seguridad: junto con el .../Latest/
... Directorio, considere:
- la …
.inProgress/
… paquete.
Si ese paquete existe, una copia de seguridad está incompleta.
tmutil status|grep -c "Running = 1"
Devuelve '1' cuando se ejecuta, '0' cuando no.
El siguiente trabajo para mí ...
Script Backup_status:
#!/usr/bin/env bash
#
# Determines if Time Machine is running and works with older Mac OS x versions
#
if [ x == x`type -P tmutil` ]; then
# Older OSx
count=`ps -ef | grep -v grep | grep -c 'CoreServices/backupd'`
# Should also detect /Volume/Time Machine …/Latest/… directory ….inProgress/… bundle existence here to make it tight.
else
# OSx 10.7+
count=`tmutil status | grep -c "Running = 1"`
fi
if [ $count == 0 ]; then
echo stopped
else
echo running
fi
Script Backup_wait:
#!/usr/bin/env bash
#
# Waits for Time Machine backup to complete
#
while [ `backup_status` == running ] ; do
sleep 2
done
tmutils
Solo existe de 10.7 en adelante. Antes de eso puedes usar, como se mencionó, /System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper
Para ejecutar manualmente la máquina de tiempo.
Entonces puedes usar wait
esperar hasta que el proceso esté terminado. Sin argumentos simplemente esperará; Si proporciona el PID, puede obtener su valor de devolución (estado de salida).
Particularmente, wait $!
Esperará el último proceso iniciado en ese shell. Sin embargo, como mencionó Lauri, esta espera volverá antes de que la máquina del tiempo esté terminada porque los acabados de BackUpd-Helper antes de la copia de seguridad. No pude encontrar ningún nombre de proceso que indicara que la copia de seguridad no estaba completa.
Mirando el contenido de /var/logs/system.log (o a través de la consola), noté que cuando la copia de seguridad está terminada, lo último que se hace es expulsar la imagen de disco de la máquina del tiempo. Efectivamente, verifiqué que (esto es OS X 10.6.8) durante la copia de seguridad hay un /Volumes/Time Machine Backups
. Por lo tanto, simplemente puede verificar si el directorio existe. Cuando ya no lo hace, la máquina de tiempo está terminada.
No estoy seguro de si esto funcionará para todos, ya que he seguido las instrucciones. aquí Para hacer una copia de seguridad de una máquina de Windows en la red.