目次
ARK コマンドとは?
ARK(Advanced Resource Keeper)とは、Linux・Unix 系統で使われる高性能なジョブスケジューラです。
多くのサーバーやクラスター環境で、CPU・メモリ・ストレージなどのリソースを効率的に割り当てるために利用され、ジョブが正常に完了するまでリソースを確保し続ける点が特徴です。
本記事では、ARK のインストールから基本・応用コマンド、エラー対処、トラブルシューティングまでを網羅し、日々の運用で直面する課題を一挙に解決します。
ARK のインストール・初期設定
1. 依存パッケージの確認
sudo apt-get update
sudo apt-get install -y build-essential libboost-all-dev
Boost ライブラリは ARK が多くの機能を実装する際に不可欠です。
OS によっては yum や zypper など適宜使ってください。
2. ソースコードのダウンロード
git clone https://github.com/ark-project/ark.git
cd ark
3. コンパイル & インストール
make
sudo make install
正常に完了したら、/usr/local/bin/ark が作成されているはずです。
4. 初期設定ファイル
sudo cp /etc/ark/example.conf /etc/ark/ark.conf
この ark.conf ファイルに以下のような基本設定を書き込みます。
| 設定項目 | 説明 |
|---|---|
SCHEDULER_PORT |
コマンドが接続するポート番号 (例: 8080) |
MAX_JOBS |
同時に実行できるジョブ数 |
LOG_DIR |
ログファイルの保存場所 |
設定ファイルを編集したら、ARK サービスを再起動します。
sudo systemctl restart ark
基本コマンド一覧
| コマンド | 概要 | 典型的な使い方 |
|---|---|---|
ark create |
新しいジョブを作成 | ark create --name "data-collector" --script collect.sh |
ark run |
ジョブをキューに投入し実行 | ark run data-collector |
ark stop |
実行中のジョブを停止 | ark stop data-collector |
ark status |
ジョブの状態を確認 | ark status data-collector |
ark log |
ジョブのログを表示 | ark log data-collector |
ark list |
キューにある全ジョブ一覧 | ark list |
ark delete |
キューからジョブを削除 | ark delete data-collector |
コマンド詳細+実用オプション
ark create
ark create \
--name "web-scrape" \
--script /usr/local/bin/scrape.py \
--env "PYTHONPATH=/opt/lib" \
--resources cpu=4,memory=8GiB,disk=10GiB
-
--env:環境変数を渡すことができ、複数指定はカンマで区切ります。 -
--resources:必要なリソースを明示。欠如があるとジョブがキューから除外されます。
ark run
-
--delay=10:ジョブを 10 秒後に開始。 -
--priority=10:優先度を10(高いほど先に実行)。
ark stop
-
--force:ジョブが応答しない場合に強制停止。
エラー対処ガイド
1. ARK ERROR: Unable to acquire resource
- 原因:指定リソースが不足。
-
対策:
-
ark statusで現在のリソース使用状況を確認。 - 複数ジョブを同時に走らせる場合は
--resourcesを緩めるか、不要なジョブを停止。 - サーバーのリソースを上げる(CPU・メモリ増設)。
-
2. ARK ERROR: Job script not found
- 原因:指定したスクリプトパスが存在しない。
-
対策:
-
-vオプションでスクリプト実行前にエラーログを取得し、パスを再確認。 - ファイル権限が不足している場合は
chmod +xして実行権限を与える。
-
3. ARK WARNING: Duplicate job name
- 原因:同名ジョブが既にキュー内に存在。
-
対策:
-
ark listで同名ジョブを検索。 - 必要に応じて
ark deleteで削除、または--forceで上書き実行。
-
4. パーミッション関連
-
Permission denied (public key)- SSH キーが設定されていない、またはリモートサーバーに登録されていない。
-
~/.ssh/authorized_keysへ公開鍵を登録し、ssh-agentで管理。
5. ネットワーク接続がタイムアウト
-
原因:
SCHEDULER_PORTがファイアウォールで遮断。 -
対策:
-
iptablesやクラウドセキュリティグループでポート開放。 -
ark start -p 8080で別ポートを試す。
-
トラブルシューティング:よくあるケース
| ケース | 具体例 | 解決策 |
|---|---|---|
| ジョブが「stuck」状態 | ark status で STALLED になる。 |
ark stop --force で強制終了してから再度 ark run。 |
| ログが古すぎて情報がない | /var/log/ark/*.log が 7 日前にローテート。 |
ark log -c でローテーション済みログを読み取る。 |
| 大量ジョブでフリーズ | ark list で 10,000 件以上表示。 |
ark list --limit 2000 でページ分割。 |
| データベースの接続エラー | ARK DB ERROR: connection lost. |
DB サービスが稼働中か確認し、再起動。 |
応用テクニック
1. マルチノードジョブの分散
ark run \
--node "node01,node02,node03" \
--name "data-processor" \
--script /opt/bin/process.sh
-
--node:指定したノードでジョブをスケジュール。 - 必要に応じて負荷を分散し、スループットを最大化。
2. 動的リソース割当
ジョブ開始時に実際に必要とするリソースを算出し、動的に要求。
ark run \
--script dyn_alloc.py \
--dynamic-resources
dyn_alloc.py 内で ARK_REQ_CPU=4 などを設定し、ジョブ実行直前にリソース情報を出力。
3. 環境変数とシークレット管理
ark create \
--name "db-backup" \
--script backup.sh \
--env "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" \
--env "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}"
環境変数を安全に管理する方法として、HashiCorp Vault などと連携。
4. カスタムヘルスチェック
ジョブの完了検知に ARK_HEALTH_CHECK を設定。
ark create \
--script ./pipeline.sh \
--health-check "curl -f http://localhost:8000/health"
成功したらリソースを解放し、失敗したらロールバック処理へ。
ログとメトリックの収集
ARK は標準出力に加え、Prometheus のエンドポイント http://localhost:9100/metrics を提供しています。
| メトリック名 | 意味 |
|---|---|
ark_jobs_total |
総ジョブ数 |
ark_jobs_running |
実行中ジョブ数 |
ark_resource_usage_cpu |
CPU 使用率 |
ark_resource_usage_memory |
メモリ使用率 |
Grafana などと組み合わせることで、運用監視ダッシュボードを構築できます。
まとめ
- インストール:依存パッケージを整備し、公式リポジトリからコンパイル。
-
基本操作:
create/ run/ stop/ status/ logでジョブを管理。 - エラー対処:リソース不足・パスエラー・重複ジョブを中心にチェック。
- 応用:マルチノード配列、動的リソース、環境変数管理、自動ヘルスチェック。
- 監視:ログ・メトリックを活用し、Grafana で可視化。
ARK は、ジョブの実行とリソース管理を一元化できる便利なツールです。
記事を参考に、環境に合わせて設定をチューニングし、安定した運用を実現してください。