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。它曾經在“常規”crontab(而不是 sudo)下工作。
  2. 該腳本將在 shell 中啟動 jupyter 筆記本。

編輯1: 我實作了新增 pipelinev 和 的完整路徑的建議. /etc/profile。都沒有解決問題。

我還刪除了腳本的第一行,並收到一封郵件,指出找不到完整路徑。它說它需要完整路徑。我添加了完整路徑,該錯誤消失了。因此,完整路徑是我問題的一部分。

我有一個類似的腳本,為 django 應用程式運行 Gunicorn 伺服器。它也可以從 shell 運行,但不能從 @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 執行時,通常不會像您習慣的登入 shell 那樣設定環境變數。特別PATH是缺少,這意味著 shell 找不到該pipenv命令。可能的解決方案:

  1. 新增外部命令的絕對路徑。您可以找到pipenv以下位置:

    $ which pipenv
    

    最後,腳本中的呼叫應該是這樣的

    /usr/bin/pipenv run jupyter notebook &
    
  2. 載入完整的環境。這通常是透過將以下行添加到腳本頂部來實現的:

    . /etc/profile
    

相關內容