Creación de un script que impida la ejecución de apt-get update si el mismo ha sido usado recientemente

Imagen de elnetotaca
0 puntos

Pues resulta que en mi caso, he creado un archivo bash.aliases que contiene lo siguiente;
alias update='sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade && sudo -k'

para verificar la ultima vez que se utilizó el apt-get update tengo la linea;
ls -lt --time-style="long-iso" /var/log/apt | grep -o '\([0-9]\{2,4\}[- ]\)\{3\}[0-9]\{2\}:[0-9]\{2\}' -m 1

ahora, como puedo hacer para verificar la ultima vez que se actualizó, para evitar actualizar la lista de paquetes a cada rato?
en caso que ejecute el alias "update", u otro alias que tambien contenga "aptget update"

Se les agradece cualquier idea.

Imagen de elnetotaca
+1
0
-1

como puedo comparar la linea;
ls -lt --time-style="long-iso" /var/log/apt | grep -o '\([0-9]\{2,4\}[- ]\)\{3\}[0-9]\{2\}:[0-9]\{2\}' -m 1
la cual me da el resultado;
2014-03-09 21:56

en esta linea???
if [ (2014-03-09 21:56) \< "???????" ]; then
echo "la lista ha sido actualizada hace poco tiempo, no se actualizará en este momento"
else
# aqui va el resto de el script
xxxxxxxxxxx
fi

alguien tiene una idea?

+1
0
-1

unzip; strip; touch; finger; mount; fsck; more; yes; unmount; sleep
Es lo que hago a diario....... En Linux mal pensados!

Imagen de elnetotaca
+1
0
-1

poner la linea en una variable;
V=`ls -lt --time-style="long-iso" /var/log/apt | grep -o '\([0-9]\{2,4\}[- ]\)\{3\}[0-9]\{2\}:[0-9]\{2\}' -m 1`

date +%Y-%m-%d-%H-%M-%S me da la fecha actual.

entonces el script queda!

V=`ls -lt --time-style="long-iso" /var/log/apt | grep -o '\([0-9]\{2,4\}[- ]\)\{3\}[0-9]\{2\}:[0-9]\{2\}' -m 1`

if [ $V \< date +%Y-%m-%d-%H-%M-%S ]; then
echo "la lista ha sido actualizada hace poco tiempo, no se actualizará en este momento"
else
# aqui va el resto de el script
xxxxxxxxxxx
fi

pero el problema esta en que $V siempre va a ser menor que date +%Y-%m-%d-%H-%M-%S.

como puedo comparar estos dos datos y verificar que exista cierto tiempo de diferencia entre ambos datos????

+1
0
-1

unzip; strip; touch; finger; mount; fsck; more; yes; unmount; sleep
Es lo que hago a diario....... En Linux mal pensados!

Imagen de rioport
+1
0
-1

Esto puede servir

#!/bin/bash

# Fecha de ultima "actualización"
UACT=`ls -lt --time-style="long-iso" /var/log/apt | grep -o '\([0-9]\{2,4\}[- ]\)\{3\}[0-9]\{2\}:[0-9]\{2\}' -m 1

# Fecha de siguiente actualización
# (en este caso es un día después de la última "actualización")
SIGACT=`date -d "$UACT 1 days" +%s`

# Fecha actual
FECHACT=`date "+%s"`

if (("$SIGACT" < "$FECHACT")); then
  # lo que sea que se tenga que hacer en caso
  # de que haya pasado el tiempo especificado
else
  # Aún no pasa el tiempo requerido para
  # realizar "equis" acción
fi

El problema que le veo es que no es muy exacto el método de revisar la fecha de modificación de los archivos de registro de apt, ya que una desinstalación o instalación cuenta como "actualización".

La parte de:

SIGACT=`date -d "$UACT 1 days" +%s`

es la que deberías modificar si quieres que pasen más días antes de la siguiente actualización, así como está es de 1 día.

+1
0
-1

-- GC --

Imagen de pwned
+1
0
-1


#!/bin/bash
DIF=$(( `date +%s` - `ls -lt --time-style="+%s" /var/log/apt | sed -n '2p' | awk '{print $6}'` ))
# Varias opciones.
if [ $DIF -lt 43200 ]; then
  echo "Aún no han pasado 12 horas."
elif [ $DIF -lt 86400 ]
  echo "Aún no han pasado 24 horas."
else
  echo "Ya ha pasado un día. Ejecutalo."
fi

Si tu salida del ls no es como la mía deberás modificar un poco la línea correspondiente.

+1
0
-1
Imagen de elnetotaca
+1
0
-1

Voy a agregar un par de datos mas para que tengan una idea mas clara de lo que quiero hacer;

el contenido de mi bash_aliases es;

alias update='sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade && sudo -k'
alias cleanup='sudo apt-get -f install && sudo dpkg --configure -a && sudo apt-get
update && sudo apt-get upgrade && sudo apt-get dist-upgrade && sudo apt-get clean && sudo apt-get autoremove && sudo -k && exit'

por tanto, si acabo de correr el alias "update"
y el mismo dia se me ocurre correr el alias "cleanup"
Quiero evitar que el sistema ejecute la linea de actualización de sources.list

Pero de ninguna manera me deja correr el script creado dentro de bash_aliases.
voy a seguir dandole vueltas al asunto a ver si lo logro hacer funcionar, ya que como no corre, ni siquiera se si funciona.

+1
0
-1

unzip; strip; touch; finger; mount; fsck; more; yes; unmount; sleep
Es lo que hago a diario....... En Linux mal pensados!

Imagen de rioport
+1
0
-1

Quiero evitar que el sistema ejecute la linea de actualización de sources.list

Explica qué quieres decir con esto

No sé si el bash_aliases permita ejecutar varios comandos, pero no se me hace buena idea.

Si quieres que con solo llamar a X comandos se haga lo que hacen los dos alias que has puesto entonces deberías crear dos scripts (de preferencia en /usr/local/sbin) con los mismos comandos que has puesto ahí, pero como van a ser dos comandos que requerirán el uso de sudo, entonces elimina sudo de esas lineas de comando.

Ya después creas un archivo de configuración (en /etc/sudoers.d))para sudo en el que lo configures para que no te pida contraseña al ejecutar esos dos comandos.

+1
0
-1

-- GC --