AWS ECSのコンテナ上でcronを実行したかったのですが、rootユーザーを渡したく無くて調べていたら見つかった「supercronic」が便利だったので紹介します。

概要

supercronicはコンテナ環境(Docker、Kubernetes、ECS等)に最適化されたcronの代替ツールで、従来のcronデーモンが抱える問題を解決するために設計されています。
以下のgithub上で公開されており、2026年現在も月1間隔で更新が行われています。
https://github.com/aptible/supercronic
今回自分が使ってみて感じた「嬉しい点」と「気になった点」をそれぞれcronと比較して紹介します。

嬉しい点

非rootユーザーで実行可能

supercronicの場合:任意ユーザーで起動・実行が可能。

cronの場合:Dockerfileなどでrootユーザーで起動が必要(実行はcrontabの任意ユーザー)

環境変数の自動継承

supercronicの場合:実行マシン上の環境変数を読み込める。パラメータストアやシークレットも環境変数経由で読み込める

cronの場合:実行マシン上の環境変数を読み込めず、dockerfile内などで環境変数を読み取りenvファイルを毎回作成する必要がある

デフォルトでstdout・stderrへログ出力

cronの場合:明示的にstdoutへリダイレクトが必要。
(例:30 2 * * * /path/to/script.sh >> /proc/1/fd/1 2>&1

supercronicの場合:デフォルトでDockerやCloudWatchにログ出力される

気になった点

crontabの書き方が異なる

supercronicの場合:実行ユーザーの項目が無い
(例: 30 2 * * * /path/to/script.sh

cronの場合:実行ユーザーの項目がある
(例: 30 2 * * * root /path/to/script.sh

crontabの書き方が微妙に変わるため注意が必要です。

公式のインストール方法がバージョンを明示的に指定

cronの場合:apt-getなどで最新版をインストール

supercronicの場合:バージョンを含めたURLからダウンロードする必要がある、最新版を取得するためにはメンテナンスが必要になる
例(v0.2.43の場合)
ENV SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.2.43/supercronic-linux-amd64 \
SUPERCRONIC_SHA1SUM=f97b92132b61a8f827c3faf67106dc0e4467ccf2 \
SUPERCRONIC=supercronic-linux-amd64
RUN curl -fsSLO "$SUPERCRONIC_URL" \
&& echo "${SUPERCRONIC_SHA1SUM} ${SUPERCRONIC}" | sha1sum -c - \
&& chmod +x "$SUPERCRONIC" \
&& mv "$SUPERCRONIC" "/usr/local/bin/${SUPERCRONIC}" \
&& ln -s "/usr/local/bin/${SUPERCRONIC}" /usr/local/bin/supercronic
詳細・最新情報は公式のリリースページにて確認して下さい。
https://github.com/aptible/supercronic/releases

終わりに

cronを利用したユーザーが感じた、かゆい所に手が届く内容だと思います。
コンテナでcronを利用する機会があった際には是非今回紹介した「supercronic」の利用も検討してみて下さい。