cronを使った自動実行

定期的のアップデートされるファイルの定型処理などは,自動的に行えるようにすると効率的だ.自動実行に使えるのがcronで,たとえば,

ディレクトリ/data/REANALYSES/NNRA-1 におく update_all.shというファイルを毎日00:20に実行するには,crontab -e をコマンドプロンプトから入力して,出てくるvi(エディター)で

20 00 * * * /data/REANALYSES/NNRA-1/update_all.sh

と編集する.なお実行開始時間を,00:00のようなキリのよい時間にすると,多くの処理が重なってしまうので,そういった時間は避ける方がいい.

pythonを仮想環境を使って動かしている場合には,仮想環境呼び出しをシェルスクリプトに書いておき,またPYTHONPATHの環境変数も書いておく.

上のupdate_all.shの中身は以下のようになっている.

source /usr/local/pyenv/versions/anaconda3-2019.10/bin/activate py37

export PYTHONPATH="/home/minobe/myprog/python.pth"

cd /data/REANALYSES/NNRA-1/dayflt_plev3d.nc

python flt_day_lastyear.py

標準出力・エラー出力の内容はメール形式で通知され,/var/spool/mail/ユーザー名などに格納される.

なお,CentOS7などで使われているsystemdでは,一般ユーザーも定期的な作業を行う設定ができるはずなのだが,oceanワークステーションではこれが現在(2021/02/19)できていない.systemctl --user と入力すると,「Failed to get D-Bus connection: そのようなファイルやディレクトリはありません」というエラーが出てしまい,一般ユーザーではなにもできないようだ.