私はシェルスクリプトを書いた
#!/bin/bash
#clear
#echo "Good morning, world."
source activate python36
python /opt/project1/Table_Control.py opt/project1/connection.yaml
cronで書いた後
# job
1 19 * * * /opt/project1/start.sh
別のバリエーションを試しました。
# job
1 19 * * * cd /opt/project1/ && ./start.sh
確認して結果を得る
May 11 19:01:01 server01 CROND[127428]: (root) CMD (/opt/project1/start.sh)
そして
May 11 19:43:01 server01 CROND[13797]: (root) CMD (cd /opt/project1/ && ./start.sh)
ところで、会社から私に電子メールを送信する必要がありますが、まだ電子メールを受信していません((
シェルスクリプトが実行されたかどうか
/opt/project1/start.sh
素晴らしい作品。
この問題をどのように解決しますか?
答え1
後でcronによって実行されるスクリプトを書くときによく犯される間違いは、スクリプトがログインして開発するときと同じ環境を持つと仮定することです。まだではない!
この回答プロセス環境の確認とデバッグの違いの追加説明です。
しかし、あなたの行ではsource activate python36
activateが現在のディレクトリにあると仮定し、他の行では python
それがcronジョブのパスにあるとします。
コマンドを独自のサブシェルに入れ、すべてをログファイルにリダイレクトして、何が起こっているかを確認します。
例えば。
1 19 * * * (cd /opt/project1/ && ./start.sh) >/tmp/pr1.log 2>&1
答え2
この種の問題をデバッグするには、各行にいくつかのロギングを追加するのが便利なことがよくあります。このように:
ソースを有効にする python36 >> /tmp/1.log 2>&1
python opt/project1/Table_Control.py opt/project1/connection.yaml >> /tmp/2.log 2>&1
毎分起動するようにcronジョブを設定することもできるので、待つ必要はありません。役に立ちます。
答え3
変更後
python opt/project1/Table_Control.py opt/project1/connection.yaml >> /tmp/2.log 2>&1
ログに、Pythonが要求したPythonモジュールが見つからなかったというエラーが見つかりました。
私は変わった
python opt/project1/Table_Control.py opt/project1/connection.yaml >> /tmp/2.log 2>&1
到着
/data/Anaconda2-4.4.0/envs/python36/bin/python opt/project1/Table_Control.py opt/project1/connection.yaml >> Table_Control.log >&1
メモ
今はうまくいきますが、シェルスクリプトで実行するとエラーはありませんが、cronジョブで実行すると要求されたPythonモジュールが見つからないというエラーが返される理由を理解できません.