crontabからエクスポートコマンドを使用してシェルスクリプトを実行する方法

crontabからエクスポートコマンドを使用してシェルスクリプトを実行する方法

シェルスクリプトがあります出口実行時の変数の値。他のスクリプトでも同じ値が使用されます。
このスクリプトを実行する方法(テストファイル)クローンから。

#!/bin/sh
export I="10"
echo $I

cronを実行するためにrootアクセスを使用します。私は次のコマンドを試しました。

*/5 * * * * /home/ubuntu/backup/.test.sh

環境変数を確認しましたが、何も更新されませんでした。

答え1

環境変数は、プロセスと直系のサブプロセスの間でのみ渡すことができます。環境変数を変更したり、環境変数を別のプロセスツリーにエクスポートすることはできません。また、エクスポートされた変数は、エクスポートが完了したのと同じレベルではなく、現在のプロセスの直系サブアイテムを処理するためにのみ再利用できます。

答え2

実際、変数はcronのスクリプト間で共有されません。次の環境変数を定義しても マンページその変数を変更するスクリプトが1つある場合、2番目のスクリプトは実際にその変数を変更しません。ただし、一時ファイルを使用して(またはディスク上のファイルを上書きしたくない場合はメモリにファイルを作成することもできます)、スクリプト間で使用できます。

たとえば、

10 * * * * /path/to/script1.sh
20 * * * * /path/to/script2.sh

script1.shの内容:

#!/bin/bash
echo "VAR1='VALUE1'" > /dev/shm/cronsharedfile

script2.shの内容:

#!/bin/bash
source /dev/shm/cronsharedfile
do_something_with $VAR1

この場合、2番目のスクリプトはscript1.shによって割り当てられた正しい値を持ちます。私は共有メモリ(/ dev / shm / cronsharedfile)に保存されているファイルを使用しましたが、ディスク(/ path / to / whateverfile)にファイルを作成できます。

答え3

図に2つのスクリプトがある場合、最初のスクリプトからエクスポートされた変数は次のスクリプトに表示されます。したがって、このようなクローン項目がある場合

*/5 * * * * ( test1.sh; test2.sh ) > log.txt

そしてtest1.sh〜のように

#!/bin/sh
export I="10"
echo $

すると$I表示されますtest2.sh

関連情報