Crontab no ejecuta el comando @reboot

Crontab no ejecuta el comando @reboot

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 crontabarchivo 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 ...".

  1. Recientemente actualicé de 17.10 a 18.04 LTS. Solía ​​​​funcionar bajo el crontab "normal" en lugar del sudo.
  2. 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 PATHfalta, lo que significa que el shell no puede encontrar el pipenvcomando. Soluciones posibles:

  1. Agregue la ruta absoluta a los comandos externos. Puedes encontrar la ubicación de pipenvcon

    $ which pipenv
    

    Al final, esa llamada en tu script debería leer algo como

    /usr/bin/pipenv run jupyter notebook &
    
  2. Cargue el entorno completo. Esto generalmente se logra agregando la siguiente línea en la parte superior de su secuencia de comandos:

    . /etc/profile
    

información relacionada