アルパインLinux上で非rootのcrontabファイルを実行するのに厄介な時間があります。なぜcrondはアルパインlinux上でroot以外のcrontabを実行できないのですか?
私は2件の他のcron関連の記事を進めてきたと私は答えを持っていない:ここでは
https://askubuntu.com/questions/23009/why-crontab-scripts-are-not-working
https://serverfault.com/questions/449651/why-is-my-crontab-not-working-and-how-can-i-troubleshoot-it
セットアップです。
私のcrontabは次のようになります。
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/bin
SHELL=/bin/bash
* * * * * /opt/monitor/monitor.sh >> /var/log/monitor.log 2>&1
0 3 * * * /opt/monitor/monitor-log-clean.sh >> /var/log/monitor.log 2>&1
私Dockerfileは今少し厄介ですが、私は必死にこの問題を解決しようとしているという理由だけで。このような感じです。要するに、私はcrontab -eのSUIDを他のユーザーとして動作させるために追加します。私はユーザーを作成し、私はcrontabファイルをインポートします。
FROM alpine:3.5
# DEPENDENCY TO ALLOW USERS TO RUN crontab -e
RUN apk add --update busybox-suid
# I LIKE BASH
RUN apk --no-cache add bash bash-doc
RUN apk --no-cache add util-linux pciutils usbutils coreutils binutils findutils grep
#... lots of custom stuff ...
# CREATE USER
RUN adduser -S robuser && \
mkdir -p /home/robuser
# ADD ENTRY POINT
ADD src/entrypoint.sh /home/robuser/entrypoint.sh
# GIVE MY USER ACCESS
RUN mkdir /etc/cron.d
RUN echo "robuser" > /etc/cron.allow
RUN echo "" >> /etc/cron.allow
RUN chmod -R 644 /etc/cron.d
# ADD MY CRONTAB
RUN mkdir -p /var/spool/cron/crontabs
ADD ./src/crontab.conf /tmp/cloudwatch/crontab.conf
RUN crontab -u robuser /tmp/cloudwatch/crontab.conf
# DEBUG... GIVE MY USER ACCESS TO EVERYTHING
RUN chown -R robuser /etc/cron.d
RUN chmod -R 755 /etc/cron.d
RUN chown -R robuser /var/spool/cron
RUN chmod -R 744 /var/spool/cron
RUN chown robuser /var/spool/cron/crontabs
RUN chmod 744 /var/spool/cron/crontabs
RUN chown -R robuser /etc/crontabs
RUN chmod -R 744 /etc/crontabs
RUN chown robuser /etc/crontabs/robuser
RUN chmod -R 744 /etc/crontabs/robuser
RUN chmod 600 /var/spool/cron/crontabs/robuser
# ADD MY MONITORING PROGRAM
RUN mkdir -p /opt/monitor
ADD src/monitor /opt/monitor
RUN mkdir -p /opt/monitor/.tmp && \
chown -R robuser /opt/monitor && \
chmod -R 700 /opt/monitor
RUN touch /var/log/entrypoint.log && \
touch /var/log/monitor.log && \
touch /var/log/cron.log && \
touch /var/log/awslogs.log && \
chown -R robuser /var/log
USER robuser
ENTRYPOINT /home/robuser/entrypoint.sh
一方、私のentrypoint.shには、これがどこかにあります。私はバックグラウンドサービスとしてcronデーモンを起動し、cron.logに冗長にログを記録します。また、さらに多くのデバッグを得るために-d 0を指定しようとしましたが、実際に出力に何も追加しませんでした。
#!/bin/bash
crond -b -l 0 -L /var/log/cron.log
#... lots of other startup stuff ...
重要なポイント:私はrobuserに切り替えていない場合は、すべてがルートとして大丈夫働きます。
私がチェックした場合cron.log、そのきれいな空:
はcrond: crond (busybox 1.25.1) started, log level 0
crond: wakeup dt=45
crond: wakeup dt=60
crond: wakeup dt=60
一方、/var/log/monitor.logは(ポストの冒頭でのcrontabを参照)完全に空です。
crondはエラーを出力しません。
私はこれをデバッグするために考えられるすべてを試しました。エラーメッセージはありません。それは単に実行され、決して印刷されません。良い提案は、単に私のcrontabにした..しかし、これもうまくいきませんでした:
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/bin
SHELL=/bin/bash
* * * * * touch /tmp/test.txt
Iは、非ルートのcronを使用する他の高山コンテナを探してみたが、ほとんどの人が迷惑を経由しません彼らのアルパインのコンテナを非ルートで稼働させること。
これをデバッグするのに役立つ提案はありますか?
これは開発に関する質問(DevOps)です。私はドッキング用のコンテナを開発しています。ドッキング用のコンテナはアルパインを使用しています。 スタックオーバーフローに関するその他のドッカー関連の質問がたくさんあります。https://stackoverflow.com/search?q=docker –