質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

889閲覧

ローカルで作成したdockerコンテナ内で動いていたcronがリモート(EC2)の中で何故か動作しません。。

Daimian

総合スコア53

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2019/03/02 15:43

編集2019/03/02 17:13

前提・実現したいこと

dockerコンテナ内でcronを実行し、スクリプトの実行結果をログ内に出力したいです。

発生している問題

MacOS(ローカル)の中で下記のdocker-compose.ymlをbuildし、up -dしてからコンテナ内に入ると、特に問題なくcronが起動し、/var/log/cron.logに結果が出ます。

インスタンスタイプt2.mediumのEC2インスタンス(リモート)の中に全く同じディレクトリを転送し、上述の通りbuildしてup -dするとcronは起動しているのですが、/var/log/cron.logに結果が出てきません。

アドバイスでも、ヒントでも何でも構いません!お願いします。

該当のソースコード

docker-compose.yml

yml

1version: '3' 2 3services: 4 web: 5 build: 6 context: ./ 7 dockerfile: Dockerfile_API 8 tty: true 9 stdin_open: true 10 container_name: kaminari_API 11 environment: 12 RAILS_ENV: development 13 volumes: 14 - ./kaminari_API/kaminari_API_cron/api_cron:/etc/cron.d/api_cron 15 - ./kaminari_API/kaminari_API_rails:/app/kaminari_API/kaminari_API_rails:rw 16 - ./start_api.sh:/usr/local/bin/start_api.sh:ro 17 ports: 18 - 3000:3000 19 working_dir: /app/kaminari_API/kaminari_API_rails 20 command: bash /usr/local/bin/start_api.sh 21 22 db: 23 image: mariadb:latest 24 container_name: kaminari_db 25 ports: 26 - 3307:3306 27 environment: 28 MYSQL_DATABASE: kaminari_API_rails_development

Dockerfile_API

Dockerfile

1FROM ruby:2.3.1 2 3RUN apt-get update 4RUN apt-get install -y nodejs 5RUN apt-get install -y vim 6RUN apt-get install -y mysql-client 7RUN apt-get install -y cron

start_api.sh

sh

1#!/bin/sh 2 3# cron 4chmod 0644 /etc/cron.d/api_cron 5chmod +x /app/kaminari_API/kaminari_API_rails/lib/tasks/dl_and_save_lightning.sh 6cron && touch /etc/cron.d/api_cron 7 8#pid 9if [[ -f ./tmp/pids/server.pid ]] 10then 11 rm ./tmp/pids/server.pid 12fi 13 14bundle install 15bundle exec rails s -b 0.0.0.0 16

kaminari_API/kaminari_API_cron/api_cron

PATH=/usr/local/bundle/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PWD=/app/kaminari_API/kaminari_API_rails BUNDLE_BIN=/usr/local/bundle/bin RAILS_ENV=development BUNDLE_PATH=/usr/local/bundle RUBYLIB=/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/lib */2 * * * * root /app/kaminari_API/kaminari_API_rails/lib/tasks/dl_and_save_lightning.sh

/app/kaminari_API/kaminari_API_rails/lib/tasks/dl_and_save_lightning.sh

sh

1#!/bin/sh 2 3sleep 30s 4cd /app/kaminari_API/kaminari_API_rails 5 6echo "$(date): executed Lightning.download_nc_file_from_NASA" >> /var/log/cron.log 2>&1 7/usr/local/bin/bundle exec /usr/local/bundle/bin/rails runner -e development Lightning.download_nc_file_from_NASA >> /var/log/cron.log 2>&1 8echo "$(date): finished Lightning.download_nc_file_from_NASA" >> /var/log/cron.log 2>&1 9 10echo "$(date): executed Lightning.read_csv_and_write_db" >> /var/log/cron.log 2>&1 11/usr/local/bin/bundle exec /usr/local/bundle/bin/rails runner -e development Lightning.read_csv_and_write_db >> /var/log/cron.log 2>&1 12echo "$(date): finished Lightning.read_csv_and_write_db" >> /var/log/cron.log 2>&1 13

試したこと

リモートの環境内でps aux | grep cronを実行すると、どうやらちゃんとcronのプロセスが動作しているみたいです(スリープ状態なのでしょうか??)。

root 9 0.0 0.0 25904 2128 ? Ss 15:14 0:00 cron root 50 0.0 0.0 11128 980 pts/1 S+ 15:36 0:00 grep cron

つまり、cronは問題なく動作しているにも関わらず、/var/log/cron.logに出力結果(エラーも含め)が出力されていないという状況です。

kaminari_API/kaminari_API_cron/api_cronに

* * * * * root echo "hello world!" >> /var/log/cron.log 2>&1

という簡単なコマンドを追加しても/var/log/cron.logが出力されることはありませんでした。。

sh /app/kaminari_API/kaminari_API_rails/lib/tasks/dl_and_save_lightning.shを実行した場合、問題なく動作するため、dl_and_save_lightning.sh自体に問題はありません。

補足情報(FW/ツールのバージョンなど)

# ローカル Docker version 18.09.2, build 6247962 docker-compose version 1.23.2, build 1110ad01
# リモート Docker version 18.06.1-ce, build e68fc7a215d7133c34aa18e3b72b4a21fd0c6136 docker-compose version 1.11.2, build dfed245

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

どうやらリモードのコンテナの中でのowerの設定が問題だったようです。
chown root:root /etc/cron.d/api_cron
を実施したところちゃんとcronが実施されました。

/etc/cron.d/にあるファイルについては所有者rootとグループがrootじゃ無いとダメみたいです。

投稿2019/03/02 19:10

Daimian

総合スコア53

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問