最初に、私の英語を申し訳ありません。
私の状況は:
追加したい変数は次のように定義されます:
export Oracle_HOME=/usr/lib/Oracle/12.2/client64
export PATH=$PATH:$Oracle_HOME/bin
export OCI_LIB_DIR=$Oracle_HOME/lib
export OCI_INC_DIR=/usr/include/Oracle/12.2/client64
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$Oracle_HOME/lib:$Oracle_HOME
このエラーを回避するために、さまざまな方法で環境変数を構成します。
問題は、ユーザーの変数を設定して(たとえば〜/ .profileで)、ターミナルでSQL接続を使用するpythonまたはshスクリプトを実行し、終了し、終了しない場合です。エラー。ただし、pythonがcrontabを介して実行されると、ログにエラーが表示されます。
/usr/lib/Oracle/12.2/client64/bin/sqlplus: error while loading shared libraries: libsqlplus.so: cannot open shared object file: No such file or directory
~./bash_profile
は環境変数の定義に使用されるが、このファイルがないことを他のフォーラムスレッドで読みました。ありがとう
cron
は独自の最小限の環境でジョブを実行し、/etc/profile.d/
のようなシェルスタートアップファイルを読み取りません。デフォルトでは、次のようなものです。
LANGUAGE=en_CA:en
HOME=/home/steeldriver
LOGNAME=steeldriver
PATH=/usr/bin:/bin
LANG=en_CA.UTF-8
Shell=/bin/sh
PWD=/home/steeldriver
いくつかのオプションがあります:
スクリプトで変数を設定し、cron
からthatを実行します。シェルスクリプトの場合、それは簡単です(スクリプトの先頭でそれらをエクスポートするか、必要に応じて環境ファイルをソースします)。 Pythonスクリプトの場合、最初に環境を設定できるシェルスクリプト内でpython
呼び出しをラップするのが最も簡単な場合があります。
crontab内のname = value
ペアのシーケンスとして環境を定義します
Oracle_HOME = /usr/lib/Oracle/12.2/client64
* 5 * * * /path/to/some/executable
(スクリプトではないので、=
の周りにスペースを入れることができます);ただし、このメソッドは変数を展開しないため、PATH=$PATH:/whatever
のようなことはできません。
詳細については、man 5 crontab
を参照してください。
私は英語以外の言語で、コメントの提案によって誰にもわずらわせたくないので、答えを英語とスペイン語の2つのバージョンにしようとします。私はスペイン語を質問者の母国語だと思っているので(そして私には正しく思える)、私は彼のために流wayに説明したいと思います。
スクリプト内でPATH変数を定義し、そこにエクスポートできます。一般に、cronjobsは非常に小さなPATHを持つシェルで実行されます。スクリプト内でPATH変数を定義し、ターミナルで実行するときに表示されるものを追加しますecho $PATH
または、〜/ .bashrcに必要な構成が既にある場合は、bashスクリプト内でsource /home/your_user/.bashrcを使用します
実行するスクリプトでPATH変数を定義した後、説明に含める変数を定義します。つまり、次のようなものが必要です。
#!/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
export Oracle_HOME=/usr/lib/Oracle/12.2/client64
export PATH=$PATH:$Oracle_HOME/bin
export OCI_LIB_DIR=$Oracle_HOME/lib
OCI_INC_DIR=/usr/include/Oracle/12.2/client64
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$Oracle_HOME/lib:$Oracle_HOME
python your_program.py
.bashrcや.bash_profileなどのファイルは、ターミナルを起動したときに読み取られるファイルですが、cronjobの場合、これらは読み取られません(ソース/home/your_user/.bashrcで許可しない限り)。これらのファイルの目的は、bash内に入る前に、環境変数、エイリアスなどとして設定された構成を持つことです。cronjob内で実行するスクリプトでは、同じことを行うか、変数を手動で宣言するか、「source 」
ペロペロ、ペロペロ、エンターテインメントの問題はありません、端末のスクリプトを作成する、スクリプトの端末を削除する、cronジョブを実行する、エラーの説明を実行します。
Puedesは変数PATHを定義し、スクリプトをエクスポートします。一般的なlos cronjobsによって、シェルの環境設定ができます。 Dentro de tu script define la variable PATH yagrégalelo que se muestra al ejecutar en la terminal echo $PATH
O algo que puedes hacer es、si ya tienes laconfiguraciónnecesaria en tu〜/ .bashrc、dentro de tu script de bash usa source /home/tu_usuario/.bashrc
定義済みの変数PATHをスクリプトスクリプトに関連付け、ラス変数を定義しますcasist、es decir、tetendríaque quedar algoasí
#!/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
export Oracle_HOME=/usr/lib/Oracle/12.2/client64
export PATH=$PATH:$Oracle_HOME/bin
export OCI_LIB_DIR=$Oracle_HOME/lib
OCI_INC_DIR=/usr/include/Oracle/12.2/client64
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$Oracle_HOME/lib:$Oracle_HOME
python tu_programa.py
Los Archivos como .bashrc y .bash_profile、son archivos que se leen cuando inicias una terminal、pero en el caso de un cronjob、estos no se leen(a menos que lo permitas con el source /home/tu_usuario/.bashrc) El Fin de estos archivos es que、antes de estar dentro de una terminal、tengas las configuraciones establecidas como variables de entorno、alias、etc. En un script que se corre dentro de un cronjob puedes hacer lo mismo、declarar las variables a mano oカーガラス詐欺「ソース」。