
Ejecuto jupyter notebook en un servidor.
Para iniciarlo, tengo el siguiente script:
#!/bin/sh
exec &> /home/user/logfile2.txt
echo 'running jup.sh' >> /home/user/logfile2.txt
cd /home/user/jup
unset XDG_RUNTIME_DIR
pipenv run jupyter notebook &
Mi sudo crontab
archivo se parece a:
@reboot sleep 20 && /usr/scripts/jup.sh
También se ha parecido a:
@reboot sleep 20 && /usr/scripts/jup.sh & -or-
@reboot sleep 20 && /home/user/jup.sh & -or-
@reboot (sleep 20 && /usr/scripts/jup.sh) > /dev/null
El script generará la parte de eco del archivo, y también hice eco del directorio de trabajo. Hasta donde puedo decir, lo único que no se ejecuta es el comando "pipenv ...".
- Recientemente actualicé de 17.10 a 18.04 LTS. Solía funcionar bajo el crontab "normal" en lugar del sudo.
- El script iniciará el cuaderno jupyter en el shell.
EDITAR 1:
Implementé las recomendaciones para agregar la ruta completa para pipenv y para . /etc/profile
. Ninguno resolvió el problema.
También eliminé la primera línea del script y recibí un correo indicando que no podía encontrar la ruta completa. Dijo que necesitaba el camino completo. Agregué la ruta completa y ese error desapareció. Por tanto, el camino completo era parte de mi problema.
Tengo un script similar que ejecuta un servidor gunicorn para una aplicación Django. También funciona desde el shell, pero no desde @reboot. También solía funcionar con @reboot.
Edición 2: Correo electrónico recibido sobre el error: (Esto se solucionó agregando la ruta)
From [email protected] Thu Jun 13 11:25:23 2019
Return-Path: <[email protected]>
X-Original-To: root
Delivered-To: [email protected]
Received: by experiments.local (Postfix, from userid 0)
id 05966E144D; Thu, 13 Jun 2019 11:25:23 -0700 (PDT)
From: [email protected] (Cron Daemon)
To: [email protected]
Subject: Cron <root@experiments> (sleep 20 && /usr/scripts/jup.sh)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
Message-Id: <[email protected]>
Date: Thu, 13 Jun 2019 11:25:23 -0700 (PDT)
/usr/scripts/jup.sh: 13: /usr/scripts/jup.sh: pipenv: not found
Guión actual:
#!/bin/sh
. /etc/profile
#exec &> /home/john/logfile2.txt
echo 'running jup.sh' >> /home/john/logfile2.txt
cd /home/john/jup
echo $PWD >> /home/john/logfile2.txt
unset XDG_RUNTIME_DIR
/usr/local/bin/pipenv run jupyter notebook &
juypter es un IDE para exploración de código. jupyter.org. Lo instalé siguiendo las instrucciones aquí:https://jupyterlab.readthedocs.io/en/stable/getting_started/installation.html
Root: lo ejecuté tanto en Sudo crontab como en crontab normal. Antes de los últimos días hanoejecutado como root. Como parte de la solución de problemas, ejecuté el script en ambos para ver si hay alguna diferencia. No tiene.
Respuesta1
Cuando cron ejecuta scripts, normalmente las variables de entorno no se configuran como está acostumbrado desde un shell de inicio de sesión. Especialmente PATH
falta, lo que significa que el shell no puede encontrar el pipenv
comando. Soluciones posibles:
Agregue la ruta absoluta a los comandos externos. Puedes encontrar la ubicación de
pipenv
con$ which pipenv
Al final, esa llamada en tu script debería leer algo como
/usr/bin/pipenv run jupyter notebook &
Cargue el entorno completo. Esto generalmente se logra agregando la siguiente línea en la parte superior de su secuencia de comandos:
. /etc/profile