
サーバー上で 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 にアップグレードしました。以前は、sudo ではなく「通常の」crontab で動作していました。
- スクリプトはシェルで 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
コマンドを見つけることができません。考えられる解決策:
pipenv
外部コマンドへの絶対パスを追加します。$ which pipenv
最終的にスクリプトの呼び出しは次のようになります。
/usr/bin/pipenv run jupyter notebook &
完全な環境をロードします。これは通常、スクリプトの先頭に次の行を追加することで実現されます。
. /etc/profile