Crontab не запускает команду @reboot

Crontab не запускает команду @reboot

Я запускаю jupyter notebook на сервере.

Для запуска у меня есть следующий скрипт:

#!/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 &

Мой sudo crontabфайл выглядит так:

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

Это также выглядело так:

@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 

Скрипт выведет часть файла echo, и я также вывел рабочий каталог. Насколько я могу судить, единственное, что не выполняется, это команда "pipenv ...".

  1. Недавно я обновился с 17.10 до 18.04 LTS. Раньше работало под «обычным» crontab вместо sudo.
  2. Скрипт запустит блокнот Jupyter в оболочке.

ПРАВКА 1: Я выполнил рекомендации по добавлению полного пути для pipenv и для . /etc/profile. Ни то, ни другое не решило проблему.

Я также удалил первую строку скрипта и получил письмо о том, что он не может найти полный путь. Он сказал, что ему нужен полный путь. Я добавил полный путь, и эта ошибка исчезла. Следовательно, полный путь был частью моей проблемы.

У меня есть похожий скрипт, который запускает сервер gunicorn для приложения django. Он тоже работает из оболочки, но не из @reboot. Он тоже раньше работал с @reboot.

Редактировать 2: Получено электронное письмо об ошибке: (Это было исправлено путем добавления пути)

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

Текущий сценарий:

#!/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 — это IDE для исследования кода. jupyter.org. Я установил его по инструкции здесь:https://jupyterlab.readthedocs.io/en/stable/getting_started/installation.html

Root: Я запускал его и в sudo crontab, и в обычном crontab. До последних нескольких дней оннетбыл запущен как root. В рамках устранения неполадок я запустил скрипт в обоих, чтобы увидеть разницу. Это не так.

решение1

Когда скрипты выполняются cron, обычно переменные окружения не устанавливаются так, как вы привыкли из оболочки входа. Особенно PATHотсутствует, что означает, что оболочка не может найти команду pipenv. Возможные решения:

  1. Добавьте абсолютный путь к внешним командам. Вы можете найти расположение pipenvс помощью

    $ which pipenv
    

    В конечном итоге этот вызов в вашем скрипте должен выглядеть примерно так:

    /usr/bin/pipenv run jupyter notebook &
    
  2. Загрузите полную среду. Обычно это достигается добавлением следующей строки в начало вашего скрипта:

    . /etc/profile
    

Связанный контент