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」の利用も検討してみて下さい。