Rescale の計算ノードに cron を仕込む

に公開

この記事について

Rescale の計算ノードに cron を設定する例を示します。ジョブIDと現在時刻を出力するスクリプトを cron により2分おきに実行します

背景

cron は Linux 環境において、コマンドやスクリプトを指定した日時や間隔で実行するツールです。実行時間として「N分おき」や「N秒おき」のような設定や、「月曜~金曜の 9:00, 12:00, 15:00, 18:00」のような設定ができます. Rescale の計算ノードにおいて cron を設定して役に立つケースとしては

  • 計算の進捗やジョブのステータスを定期的に確認して、特定の条件が満たされた場合にアクション(ジョブの停止、バックアップの取得など)を実行する
  • あらかじめ決められたスケジュールに従って, Rescale に関するアクションを実行する(ジョブの投入、ファイルの削除など)

などが考えられます(ただし、スケジュールされたアクションを実行するには, cron が稼働する Rescale のクラスタを長期間起動したままにする必要があるので, AWS Lanmda などを使った方がコスト効率が良いケースがほとんどだと思います)

サンプルジョブでやること

Rescale の計算ノードに cron を設定し、ジョブIDと現在時刻を出力するコマンドを2分おきに実行します。コマンドは .sh ファイルとして保存し、入力ファイルとして Rescale へアップロードします. cron でのコマンドの実行時には、ジョブコマンド実行時における環境変数は引き継がれないようです。したがって、使用したい環境変数がある場合は, cron で実行するコマンド中に export コマンドを入れて環境変数を設定する必要があります
この記事中では行いませんが, Embeded API Key を使用すれば, Rescale API を使用した処理の定期実行やスケジュール実行が可能です

ジョブ設定

  • Inputs
    • hello_script.sh
  • Software Settings
    • Bring Your Own Software (CPU)
    • Command
export CRON_TMP_FILENAME=cron.tmp

echo "*/2 * * * * export RESCALE_JOB_ID=${RESCALE_JOB_ID}; ${PWD}/hello_script.sh >> ${PWD}/script_log.txt" >> ${CRON_TMP_FILENAME}
crontab ${CRON_TMP_FILENAME}
rm ${CRON_TMP_FILENAME}

sleep 1h
  • Hardware Settings
    • Starlite 1 core
    • Walltime: 充分長く設定

hello_script.sh の中身は以下のようになっています

#/bin/bash

echo "Hello from Rescale job (Job ID: ${RESCALE_JOB_ID}) at $(date)"

このジョブを実行すると、1時間の間、2分おきにジョブIDと現在時刻が script_log.txt に出力されます

Discussion