
私のDebian
サーバーでは、コードをcrontab
スケジュールするために使用しますpython
。問題は、次のような行を追加すると次のようになります。
6 9 * * * python /path/to/daily_task.py &> $HOME/out.txt
驚くことではありませんが、出力にはpython
コマンドが見つからないことが示されます。
もちろん、 のように crontab エントリにフルパスを追加することもできますが、見た目が乱雑になるうえ、たとえばの/opt/python/3.9.2/bin/python
ような操作を実行する必要がある場合にもこの問題が続くため、このアイデアは気に入りません。os.system("python task.py")
daily_task.py
次のような行を追加してみました/etc/environment
:
export PATH="$PATH:/opt/python/3.9.2/bin/"
python
再起動後、ターミナル ウィンドウで を使用できるようになりましたが、crontab
は$PATH
まだ のみで構成されています/usr/bin
。
crontab ファイルを変更せずに、$PATH
あらゆる場所を変更するには、このコードをどこに配置すればよいですか?crontab
答え1
の内容を見ると/bin
、多くのプログラムが bin ディレクトリに直接配置されていないため、多くのシンボリックリンクがあることがわかります。同じことができます。
sudo ln -s /opt/python/3.9.2/bin/python /usr/bin
この方法では、 を変更する必要はありませんcrontab
。
答え2
次のようにして、crontab ファイル自体に環境変数を追加できます。
PATH=/usr/bin:/whatever/bin
HOME=/home/myuser
6 9 * * * python /path/to/daily_task.py &> $HOME/out.txt