kill `ps -C "debmirror" -o pid=` no corre dentro del script y si por fuera. [Solucionado]
Recién he realizado este sencillo script para automatizar la realización de un mirror local y poder llevarlo en un HD Externo:
#!/bin/bash
#
PATH=/usr/local/bin:/usr/bin:/bin
DH=`date +%R` # hora del dia militar (por ej. 13:20)
pid=`ps -C "debmirror" -o pid=`
if [ $DH = "17:00" ]; then
debmirror --passive --progress --verbose --host=ftp.debian.org \
--root=debian --dist=stable --section=main,contrib,non-free --arch=amd64 --method=http \
--nosource --cleanup --ignore-small-errors --ignore=tools/* --ignore=doc/* --ignore=ls-lR* \
--ignore=README* --diff=none --ignore-release-gpg \
--proxy=http://xxx:xxx:xxx:xx:8080/ \
~/debian
fi
if [ $DH = "07:30" ]; then
kill $pid
fi
El objetivo del mismo es que arranque a las 17:00 horas todos los días y que a las 07:30 horas de la mañana pues mate automaticamente el proceso ya que a esa hora entra el personal, con el commando
kill `ps -C "debmirror" -o pid=`El problema es que pasan las 07:30 y continua trabajando, pero si voy y paso directamente en la consola kill `ps -C "debmirror" -o pid=`si mata el proceso, tal ves es que lo hice mal (lo más probable) pero no se que cosa es.
- Inicie sesión o regístrese para enviar comentarios
- 537 lecturas


el script se ejecuta todo el tiempo (en períodos determinados) o solo una vez?
ten en cuenta que si ejecuta el primer if por verdadero hasta que no realice todo (que no termine este proceso) no ejecutará el segundo, por lo tanto no matará (kill) el proceso... talvez un "&" te pueda servir...
P/S: sobre "debmirror" no tengo idea
Tiene razón Damian, ya que el comando debmirror aunque técnicamente funcione en otra shell diferente, deja a la shell en la que se ejecuta el script esperando por su estado de terminación y salida, la solución es pasarlo a segundo plano con "&" como dijo Damian. Añadiría además que utilizases:
killall debmirror
Puedes tener dos tareas con cron, una que lance el debmirror y la otra que mate el proceso:
00 17 * * * /home/mirror.sh
30 07 * * * /home/kill.sh
Gracias a los 3 por sus respuestas, tienen mucha razón, lo que pasa es que trataba de ahorrarme una linea más en el cron. Lo doy por solucionado, dejando solo un if y pasando a otro script la linea kill para matar el proceso.
Saludos y Gracias
Gracias a los 3 por sus respuestas, tienen mucha razón, lo que pasa es que trataba de ahorrarme una linea más en el cron. Lo doy por solucionado, dejando solo un if y pasando a otro script la linea kill para matar el proceso.
Saludos y Gracias
Y te la puedes ahorrar, pon el proceso de debmirror en segundo plano poniendo & al final del comando, y usando killall debmirror. Todo en el mismo script.