
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 crontab
arquivo 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 ...".
- Recentemente atualizei de 17.10 para 18.04 LTS. Costumava funcionar no crontab 'normal' em vez do sudo.
- 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 PATH
está faltando, o que significa que o shell não consegue encontrar o pipenv
comando. Soluções possíveis:
Adicione o caminho absoluto aos comandos externos. Você pode encontrar a localização de
pipenv
com$ which pipenv
No final, essa chamada no seu script deve ser algo como
/usr/bin/pipenv run jupyter notebook &
Carregue o ambiente completo. Isso geralmente é conseguido adicionando a seguinte linha ao topo do seu script:
. /etc/profile