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 

스크립트는 파일의 파일 에코 부분을 출력하며 작업 디렉터리도 에코했습니다. 내가 알 수 있는 한 실행되지 않는 유일한 것은 "pipenv ..." 명령입니다.

  1. 최근에 17.10에서 18.04 LTS로 업그레이드했습니다. 이전에는 sudo 대신 '일반' crontab에서 작동했습니다.
  2. 스크립트는 셸에서 jupyter 노트북을 시작합니다.

편집 1: Pipenv 및 . /etc/profile. 둘 다 문제를 해결하지 못했습니다.

또한 스크립트의 첫 번째 줄을 삭제하고 전체 경로를 찾을 수 없다는 메일을 받았습니다. 전체 경로가 필요하다고 말했습니다. 전체 경로를 추가했더니 해당 오류가 사라졌습니다. 따라서 전체 경로는 내 문제의 일부였습니다.

django 앱용 gunicorn 서버를 실행하는 비슷한 스크립트가 있습니다. 셸에서도 작동하지만 @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

루트: Sudo crontab과 일반 crontab에서 모두 실행했습니다. 지난 며칠 전에는~ 아니다루트로 실행되었습니다. 문제 해결의 일환으로 두 스크립트 모두에서 스크립트를 실행하여 차이가 있는지 확인했습니다. 그렇지 않았습니다.

답변1

cron에 의해 스크립트가 실행될 때 일반적으로 환경 변수는 로그인 셸에서 사용하는 것처럼 설정되지 않습니다. 특히 PATH누락되었습니다. 이는 쉘이 pipenv명령을 찾을 수 없음을 의미합니다. 가능한 해결책:

  1. 외부 명령에 절대 경로를 추가합니다. pipenv의 위치를 ​​찾을 수 있습니다.

    $ which pipenv
    

    결국 스크립트의 호출은 다음과 같아야 합니다.

    /usr/bin/pipenv run jupyter notebook &
    
  2. 전체 환경을 로드합니다. 이는 일반적으로 스크립트 상단에 다음 줄을 추가하여 수행됩니다.

    . /etc/profile
    

관련 정보