私の目標は、crontabを含むDockerコンテナを実行することです。したがって、root以外のユーザーとしてスケジュールされたcrontabジョブを実行できるようにしたいです。次のDockerイメージを実行しています。
FROM openjdk:8
RUN apt-get update && apt-get -y install nano
RUN apt-get update && apt-get -y install cron
RUN service cron start # tried both
RUN cron # tried both
ENV TZ="Europe/Rome"
RUN useradd -u 8877 myuser
USER myuser
CMD ["tail", "-f", "/dev/null"]
Dockerスタックにデプロイします。
...
crontab:
image: reg/image
cap_drop:
- cap_dac_override
deploy:
mode: replicated
replicas: 1
restart_policy:
condition: any
delay: 3s
window: 60s
placement:
constraints: [node.role == manager]
update_config:
delay: 2s
volumes:
- v:/my/vol
environment:
- PUID=8877
- PGID=8877
...
docker exec -it <id> bash
myuserでコンテナを実行すると、サービスcronステータスが実行され、「cron is running」が出力されます。しかし、実行すると、crontab -e
私が作成しているファイルに「記録ファイルに問題があります」という赤いエラーメッセージが表示されます。保存しようとすると、「No crontab for myuser - using 空のワンタッチ: '/home/myuser/.selected_editor'をタッチできません。そのファイルまたはディレクトリはありません。/home/myuser/ディレクトリを作成できません。local/share /nano/: 検索履歴やカーソル位置を保存/ロードするために必要なファイルやディレクトリはありません。
答え1
crontabの使用を制限する方法はいくつかあります。インストール方法については、crontabのマンページを参照してください。
最も簡単な場合、制御は/etc/cron.allow、/etc/cron.denyファイルを介して行われます。使用規則は非常に具体的です。
- 両方のファイルが存在しない場合は、ルートのみcrontabを実行できます。
- cron.allowが存在する場合、crontabを使用するにはユーザー名を一覧表示する必要があります。
- cron.denyのすべてのユーザーを禁止します。
- cron.denyのみが存在する場合は、記載されていないすべてのユーザーがcrontabを使用できます。