Page 1 of 1

No consigo que funcione crontab

Posted: Sat May 27, 2017 5:52 pm
by ImHarvol
Buenas, llevo ya unas semanas teniendo problemas con el crontab:

Tengo 3 scripts en Python, que se tienen que abrir (y mantener abiertas) en segundo plano cuando la raspberry pi se encienda, el problema es que no lo consigo. Al principio queria abrir directamente el script Python desde crontab, pero no lo conseguia, asi que ahora mismo, tengo este simple archivo run.sh:

Code: Select all

#!/bin/bash

python /home/user/apis/carpeta/1 &

python /home/user/apis/carpeta/2 &

python /home/user/apis/carpeta/3 &
Y en el crontab tengo la siguiente linea:

Code: Select all

@reboot "/home/imharvol/apis/hellcase/.run.sh &"
Y he probado otras cosas, como ponerlo sin comillas, pero nada, reiniciaba la raspberry pi, y no se estaban ejecutando

Re: No consigo que funcione crontab

Posted: Sun May 28, 2017 8:34 am
by screspo
Prueba con esta sintaxis:

(te pongo un ejemplo de script python y otro de shell)

@reboot sh /root/led.sh &

@reboot python sh /root/test-adsl.py &

y ya nos dices, salu2,

Re: No consigo que funcione crontab

Posted: Sun May 28, 2017 8:52 am
by ImHarvol
screspo wrote:Prueba con esta sintaxis:

(te pongo un ejemplo de script python y otro de shell)

@reboot sh /root/led.sh &

@reboot python sh /root/test-adsl.py &

y ya nos dices, salu2,
He puesto exactamente esto (la ruta esta bien):

Code: Select all

@reboot sh /home/imharvol/apis/hellcase/.run.sh &
Pero sigue sin funcionar.
El script se trata de un StreamListener de Tweepy, y lo que debería hacer es, responder a los tweets que mando. Con el crontab no he conseguido que funcione, en cambio, en la consola pongo /home/imharvol/apis/hellcase/.run.sh y se empieza a ejecutar correctamente en segundo plano.
¿Se te ocurre algo mas? Gracias de todos modos ^^

Re: No consigo que funcione crontab

Posted: Sun May 28, 2017 11:26 am
by raspdroid
¿Qué hace el amperson en el script bash? Has probado así?

Code: Select all

#!/bin/bash

python /home/user/apis/carpeta/1 

python /home/user/apis/carpeta/2 

python /home/user/apis/carpeta/3 

Code: Select all

@reboot python /home/pi/myscript.py &
o con sudo

Code: Select all

@reboot sudo python /home/pi/myscript.py &

Re: No consigo que funcione crontab

Posted: Tue May 30, 2017 12:29 pm
by lmarmisa
La utilidad crontab funciona bien. Así que el problema estará en algún detalle.

Supongo que los scripts python que deseas lanzar no precisan de entorno gráfico. Cuando arrancas un programa con CRON, no tienes disponibles variables del entorno como DISPLAY o XDG_RUNTIME_DIR y por ello no funcionarán a la primera programas que requieran de GUI. Además el fichero ~/.bashrc hace cosas algo diferentes si se inicia una sesión no interactiva y todo ello puede dar lugar a problemas en la ejecución de tareas con CRON.

El caracter & de ejecución en segundo plano no debes incluirlo desde crontab. En las versiones antiguas de UNIX, si el proceso que arrancó los comandos en segundo plano finalizaba, también lo hacían esos comandos. Para que eso no ocurriera había que utilizar un nohup al inicio del comando y un & al final (nohup miscript &). En la actualidad no estoy seguro del cómo se comporta bash en ese caso, pero, si lo hace como antaño, eso podría explicar lo que te sucede. En todo caso, elimina el & y no pongas nohup.

El uso de redirecciones de stdout ( > ) y stderr ( 2> ) puede dar pistas de si los scripts llegan a funcionar y hasta dónde.

Re: No consigo que funcione crontab

Posted: Tue May 30, 2017 6:13 pm
by JarvizX
Hola podrias intentar colocando la ruta completa del paquete de python es decir:

@reboot /usr/bin/python /home/pi/myscript.py &

Re: No consigo que funcione crontab

Posted: Thu Jun 01, 2017 12:07 pm
by ImHarvol
He probado todo esto en el sudo crontab -e, pero no se ha creado ningun log, ni tampoco se ha iniciado el script

Code: Select all

@reboot python /home/imharvol/apis/hellcase/stream-main_yasuo26.py > test.txt &
@reboot python /home/imharvol/apis/hellcase/stream-main_yasuo26.py > test.txt
@reboot python /home/imharvol/apis/hellcase/stream-main_yasuo26.py &
@reboot python /home/imharvol/apis/hellcase/stream-main_yasuo26.py
@reboot python /home/imharvol/apis/hellcase/stream-main_yasuo26.py 2> test.txt &
@reboot python /home/imharvol/apis/hellcase/stream-main_yasuo26.py 2> test.txt
@reboot python /home/imharvol/apis/hellcase/stream-main_yasuo26.py >> test.txt &
@reboot python /home/imharvol/apis/hellcase/stream-main_yasuo26.py >> test.txt

@reboot /usr/bin/python /home/imharvol/apis/hellcase/stream-main_yasuo26.py > t$
@reboot /usr/bin/python /home/imharvol/apis/hellcase/stream-main_yasuo26.py > t$
@reboot /usr/bin/python /home/imharvol/apis/hellcase/stream-main_yasuo26.py &
@reboot /usr/bin/python /home/imharvol/apis/hellcase/stream-main_yasuo26.py
(Tambien he probado a poner sudo, y tampoco funcionaba.

Y esto es lo que me sale al poner sudo grep CRON /var/log/syslog

Code: Select all

Jun  1 14:08:36 imharvol cron[421]: (CRON) INFO (pidfile fd = 3)
Jun  1 14:08:36 imharvol cron[421]: (CRON) INFO (Running @reboot jobs)
Jun  1 14:08:36 imharvol CRON[556]: (root) CMD (/usr/bin/python /home/imharvol/apis/hellcase/stream-main_yasuo26.py)
Jun  1 14:08:36 imharvol CRON[557]: (root) CMD (python /home/imharvol/apis/hellcase/stream-main_yasuo26.py 2> test.txt &)
Jun  1 14:08:36 imharvol CRON[558]: (root) CMD (python /home/imharvol/apis/hellcase/stream-main_yasuo26.py >> test.txt &)
Jun  1 14:08:36 imharvol CRON[559]: (root) CMD (python /home/imharvol/apis/hellcase/stream-main_yasuo26.py > test.txt )
Jun  1 14:08:36 imharvol CRON[567]: (root) CMD (/usr/bin/python /home/imharvol/apis/hellcase/stream-main_yasuo26.py > test.txt)
Jun  1 14:08:36 imharvol CRON[571]: (root) CMD (python /home/imharvol/apis/hellcase/stream-main_yasuo26.py > test.txt &)
Jun  1 14:08:36 imharvol CRON[568]: (root) CMD (python /home/imharvol/apis/hellcase/stream-main_yasuo26.py )
Jun  1 14:08:36 imharvol CRON[560]: (root) CMD (python /home/imharvol/apis/hellcase/stream-main_yasuo26.py >> test.txt)
Jun  1 14:08:36 imharvol CRON[566]: (root) CMD (/usr/bin/python /home/imharvol/apis/hellcase/stream-main_yasuo26.py > test.txt &)
Jun  1 14:08:36 imharvol CRON[574]: (root) CMD (/usr/bin/python /home/imharvol/apis/hellcase/stream-main_yasuo26.py &)
Jun  1 14:08:36 imharvol CRON[583]: (root) CMD (python /home/imharvol/apis/hellcase/stream-main_yasuo26.py &)
Jun  1 14:08:36 imharvol CRON[593]: (root) CMD (python /home/imharvol/apis/hellcase/stream-main_yasuo26.py 2> test.txt )
Jun  1 14:09:01 imharvol CRON[1819]: (root) CMD (  [ -x /usr/lib/php5/sessionclean ] && /usr/lib/php5/sessionclean)
Al poner sudo journalctl -u cron, me salia:

Code: Select all

Jun 01 14:31:51 imharvol CRON[512]: (root) CMD (python /home/imharvol/apis/hellcase/stream-main_yasuo26.py)
Jun 01 14:31:51 imharvol CRON[513]: (root) CMD (python /home/imharvol/apis/hellcase/stream-main_yasuo26.py &)
Jun 01 14:31:51 imharvol CRON[447]: pam_unix(cron:session): session closed for user root
Jun 01 14:31:53 imharvol CRON[448]: pam_unix(cron:session): session closed for user root

Re: No consigo que funcione crontab

Posted: Thu Jun 01, 2017 12:35 pm
by lmarmisa
Si llamas al comando sudo crontab -e estás programando las tareas de arranque con el usuario root. Por ejemplo, si el fichero stream-main_yasuo26.py no tuviera los permisos adecuados para other, el script no se ejecutaría desde root. Lo normal es arrancar el cron desde la cuenta del usuario, que en tu caso parece ser imharvol.

Echa un vistazo a este comando:

Code: Select all

ls -l /home/imharvol/apis/hellcase/stream-main_yasuo26.py
¿Hay alguna razón para que esas tareas no se arranquen desde el usuario imharvol sino desde root?. Lo normal es llamar a crontab del siguiente modo:

Code: Select all

crontab -e
Me da la sensación de que tus problemas se deben a ese intento de arrancar los trabajos desde root.

Re: No consigo que funcione crontab

Posted: Thu Jun 01, 2017 1:09 pm
by ImHarvol
Buenas, parece que he encontrado el error, solo que ahora no se como resolverlo :/
Crontab ha mandado un mail al iniciarse, con este error:

Code: Select all

Traceback (most recent call last):
  File "/home/imharvol/apis/hellcase/stream-main_yasuo26.py", line 45, in <module>
    stream.filter(follow=follow_users_ids)
  File "/usr/local/lib/python2.7/dist-packages/tweepy/streaming.py", line 445, in filter
    self._start(async)
  File "/usr/local/lib/python2.7/dist-packages/tweepy/streaming.py", line 361, in _start
    self._run()
  File "/usr/local/lib/python2.7/dist-packages/tweepy/streaming.py", line 294, in _run
    raise exception
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='stream.twitter.com', port=443): Max retries exceeded with url: /1.1/statuses/filter.json?delimited=length (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7645ce30>: Failed to establish a new connection: [Errno -2] Name or service not known',))

Re: No consigo que funcione crontab

Posted: Thu Jun 01, 2017 1:20 pm
by lmarmisa
El enlace seguro https://stream.twitter.com/ requiere autorización con usuario y contraseña.

Re: No consigo que funcione crontab

Posted: Thu Jun 01, 2017 1:24 pm
by ImHarvol
lmarmisa wrote:El enlace seguro https://stream.twitter.com/ requiere autorización con usuario y contraseña.
¿No se puede puede usar OAuth?

Re: No consigo que funcione crontab

Posted: Mon Jul 03, 2017 8:26 pm
by srdaza
Yo lo uso así para un script python:

desde consola, sin root: crontab -e

*/10 * * * * /usr/bin/python /home/usuario/folder1/folder2/intrusos.py > /dev/null 2>&1

Esto siempre y cuando no tenga ningun comando con "sudo"