¿Cómo ejecutar un trabajo cron cada vez que finaliza la ejecución anterior?

Me gustaría ejecutar un script de Python cada vez que finalice y creo que puedo hacerlo con cron, pero no estoy seguro de cómo hacerlo.

La idea es que cada vez que finalicen los scripts de Python, tendrá que ejecutarse una y otra vez.

He buscado respuestas aquí pero no puedo encontrar algo similar a esto.

¿Por qué no hacer que el script se repita en lugar de salir o hacer que se ejecute cuando algo sucede, por ejemplo, un directorio cambia dependiendo de lo que está buscando?
El script se usa para raspar los resultados de Google, por lo que debe tomar algún tiempo debido a la sobrecarga de IP.
Por lo tanto, podría hacer un bucle y configurarse para reiniciarlo si falla (este último funcionaría incluso si finaliza normalmente)

Respuestas (2)

En terminales:

while :; do ./script_name; done

o

while :; do python programm.py; done

Si desea agregar algo de tiempo de suspensión antes de ejecutar el programa nuevamente, use el comando 'dormir':

Por ejemplo:

while :; do python programm.py; sleep 90; done

en este ejemplo, el ciclo dormirá 90 segundos antes de volver a ejecutar su programa

¿Tengo que escribir algo como: python programm.py en algún lugar?
mientras [ 1 ]; hacer python programm.py; hecho Puede agregar otros comandos si lo desea: while [ 1 ]; hacer python programm.py; comando2; comando3; etc; done Simplemente divídalo con ;
Responda a continuación y mi respuesta es secuencias de comandos de shell. Bash, sh, etc.: developer.apple.com/library/mac/documentation/opensource/…
Gracias @ user3439968. He usado la tercera instrucción y funciona de maravilla. Eso es todo lo que necesito.

Cron es un programador, es bueno si desea que su secuencia de comandos se ejecute cada 5 minutos, o cada tercer miércoles, etc., pero para un reinicio arbitrario al finalizar, lo que podría (supongo, no indica qué está haciendo la secuencia de comandos de Python, cómo tiempo que lleva o si el tiempo de finalización es variable, etc.) ser esencialmente aleatorio, no es la mejor opción.

Puede insertar algo de lógica en la secuencia de comandos directamente, o simplemente puede envolver la secuencia de comandos con alguna lógica de Shell Scripting según la respuesta de @ user3439968, mi versión es esencialmente la misma, pero la he mostrado un poco más detallada con opciones para mantener un ojo en los reinicios, etc. Puede escribir esto en casi cualquier shell de línea de comando, lo más simple es abrirlo Terminaly escribirlo directamente en él

while true
do
    /path/to/script.py
    sleep 60
    date >> /path/to/logfile.txt
    echo "The script ended, and I restarted it after 60 seconds" >> /path/to/logfile.txt
done

En el ejemplo anterior, el reinicio no es inmediato sino que espera 60 segundos, luego agrega la fecha actual y un mensaje a un archivo de registro en cada reinicio. Puede poner cualquier código de control después de la ejecución inicial de la secuencia de comandos de Python y la donelínea, incluso hacer que le envíe un correo electrónico para informarle que se ha reiniciado, etc.

Debido a que no especifica qué es "verdadero", nunca puede ser falso, por lo que esencialmente todo entre doy donese repite una y otra vez hasta que recibe una señal de interrupción adecuada como un comando CTRL-co un kill -9 PIDtipo de otra sesión de línea de comando.