Crontab não executa o comando @reboot

Crontab não executa o comando @reboot

Eu executo o jupyter noteboook em um servidor.

Para iniciá-lo, tenho o seguinte 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 &

Meu sudo crontabarquivo se parece com:

@reboot sleep 20 && /usr/scripts/jup.sh

Também se pareceu com:

@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 

O script produzirá a parte de eco do arquivo, e eu também fiz eco no diretório de trabalho. Pelo que sei, a única coisa que não executa é o comando "pipenv ...".

  1. Recentemente atualizei de 17.10 para 18.04 LTS. Costumava funcionar no crontab 'normal' em vez do sudo.
  2. O script iniciará o notebook jupyter no shell.

EDITAR 1: Implementei as recomendações para adicionar o caminho completo para pipenv e para . /etc/profile. Nenhum dos dois resolveu o problema.

Também excluí a primeira linha do script e recebi um e-mail informando que não foi possível encontrar o caminho completo. Ele disse que precisava do caminho completo. Adicionei o caminho completo e o erro desapareceu. Portanto, o caminho completo fazia parte do meu problema.

Eu tenho um script semelhante que executa um servidor gunicorn para um aplicativo Django. Também funciona no shell, mas não no @reboot. Também costumava funcionar com @reboot.

Editar 2: Email recebido sobre o erro: (Isso foi corrigido adicionando o caminho)

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

Roteiro Atual:

#!/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 é um IDE para exploração de código. jupyter.org. Eu instalei através das instruções aqui:https://jupyterlab.readthedocs.io/en/stable/getting_started/installation.html

Root: Eu executei tanto no sudo crontab quanto no crontab normal. Antes dos últimos dias,nãofoi executado como root. Como parte da solução de problemas, executei o script em ambos para ver se faz diferença. Não foi assim.

Responder1

Quando os scripts são executados pelo cron, geralmente as variáveis ​​de ambiente não são definidas como você está acostumado em um shell de login. Especialmente PATHestá faltando, o que significa que o shell não consegue encontrar o pipenvcomando. Soluções possíveis:

  1. Adicione o caminho absoluto aos comandos externos. Você pode encontrar a localização de pipenvcom

    $ which pipenv
    

    No final, essa chamada no seu script deve ser algo como

    /usr/bin/pipenv run jupyter notebook &
    
  2. Carregue o ambiente completo. Isso geralmente é conseguido adicionando a seguinte linha ao topo do seu script:

    . /etc/profile
    

informação relacionada