
我在伺服器上運行 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 ...”命令。
- 我最近從 17.10 升級到 18.04 LTS。它曾經在“常規”crontab(而不是 sudo)下工作。
- 該腳本將在 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
命令。可能的解決方案:
新增外部命令的絕對路徑。您可以找到
pipenv
以下位置:$ which pipenv
最後,腳本中的呼叫應該是這樣的
/usr/bin/pipenv run jupyter notebook &
載入完整的環境。這通常是透過將以下行添加到腳本頂部來實現的:
. /etc/profile