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

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

新規登録して質問してみよう
ただいま回答率
85.48%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

Q&A

2回答

488閲覧

クーロンでS3にログを同期するシェルスクリプトを実行したいのですがうまくいきません。

iii

総合スコア29

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

0グッド

0クリップ

投稿2018/01/30 01:46

コードは以下の通りです。
${AWSPATH}/aws s3 sync ${LOG_DIR}/${log_pass}/ "${S3_DIR}/${log_pass}/" >> $LOGFILE

AWSPATH:AWSのパス
LOG_DIR:ログのディレクトリ
log_pass:ログのディレクトリの1部
S3_DIR:S3のディレクトリ
LOGFILE:最後に書き込むログのディレクトリ
パスはすべて正しいことを確認済みです。

ログに書き込むことはできるのですが、肝心のS3への同期ができません。
クーロンで実行しているため、環境変数が変わってしまっているとかでしょうか?
どうやったら直せるのでしょうか。

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

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

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

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

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

CHERRY

2018/01/30 03:27

シェルスクリプトを実行させている環境は何でしょうか? AWSPATH 等は、どこで定義しているのでしょうか?
iii

2018/01/30 04:25

ご質問ありがとうございます。シェルスクリプトはTeratermで実行しています。
guest

回答2

0

スクリプトをシェルから実行して、正常に終了するのであればCronで実行させているユーザーがまずいのかも知れません。
まずはそこから確認ですね。

投稿2018/01/30 02:02

tsuntsun

総合スコア199

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

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

iii

2018/01/30 02:35

ご回答ありがとうございます。 クーロンで実行されているユーザーとはどのように確認するのでしょうか。 そのユーザーとシェルスクリプトの所有者が違っているとまずいという事でしょうか。 続けての質問ですみません。。
tsuntsun

2018/01/30 02:58

root権限を持っていれば、/var/spool/cron の中を覗いてみて下さい。 そうでない場合は crontab -l で確認出来ます。 ちなみに crontab はどうやって設定されましたか? 一度、正常に実行できるユーザーで crontab -e で設定し直されてはいかがでしょうか?
iii

2018/01/30 04:15

ご回答ありがとうございます。crontabの中ではクーロンの実行日時と実行するシェルスクリプトを指定しているだけで、それ以外は何も設定していません。。 それだとまずいという事でしょうか? 具体的には何の設定が必須なのでしょうか。
tsuntsun

2018/01/30 04:33

シェルスクリプトはコマンドラインから実行すると、正常に終了して同期もされるんですよね。 多分、シェルスクリプト内で出力を /dev/null にリダイレクトしているかと思いますが、 リダイレクト先を /tmp/hogehoeg.out みたいにして、aws cli の出力を確認してみて下さい。 またその際に、crond も再起動して /var:/log/cron も同時に監視して見て下さい。
tsuntsun

2018/01/30 04:37

後、pythonを通常ではない場所にインストールしているなんて事はないですか?
guest

0

AWSPATH 等は、どこで定義しているのでしょうか?
ユーザーの .bash_profile でしょうか?

通常、 cron から起動されるシェルは、~/.bash_profile 等の設定ファイルを読み込みません。(下記の bash のマニュアル参照)
ユーザーの /.bash_profile に環境変数を設定しても cron で実行する際は、/.bash_profile が、読み込まれませんので、環境変数は未定義になります。

cron で環境変数を定義したい場合は、「crontab -e」で、cronで実行するコマンドを登録する際に一緒に記載してください。(下記の crontab のマニュアル参照)


bash(1) - GNU Bourne-Again SHell より引用

bash が対話的なログインシェルとして起動されるか、 --login オプション付きの非対話的シェルとして起動されると、 /etc/profile ファイルが存在すれば、 bash はまずここからコマンドを読み込んで実行します。 このファイルを読んだ後、 bash は ~/.bash_profile, ~/.bash_login, ~/.profile をこの 順番で探します。 bash は、この中で最初に見つかり、かつ読み込みが可能であるファイルから コマンドを読み込んで実行します。 --noprofile オプションを使ってシェルを起動すれば、 この動作を行わないようにできます。


crontab(5)

crontab の動作行は、 環境変数の設定か cronコマンドのいずれかである。 環境変数の設定は以下の形式をとる:

name = value

ただし、等号 (=) 両側のスペースはなくても良い。 value 内部の (先頭ではない) スペース文字は、値の一部として name に与えられる。 value 文字列は引用符で括ってもよい (シングルクォートでもダブルクォートでも良いが、 揃っている必要がある)。 こうすれば先頭や末尾の空白を値に渡すことができる。

いくつかの環境変数は cron(8) デーモンによって自動的に設定される。 SHELL は /bin/sh に設定され、 LOGNAME とHOME は /etc/passwd の crontab の所有者の行から設定される。 HOME と SHELL は crontab 内部の記述で変更できる。 LOGNAME は変更できない。

投稿2018/01/30 03:42

CHERRY

総合スコア25171

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

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

iii

2018/01/30 04:12

ご回答ありがとうございます。crontabの中ではクーロンの実行日時と実行するシェルスクリプトを指定しているだけで、環境変数に関しては何も書いていません。。 環境変数が未設定だとまずいという事でしょうか?
CHERRY

2018/01/30 04:13

AWSPATH 等は、どこで定義しているのでしょうか?
iii

2018/01/30 04:24

AWSPATHはシェルスクリプト内で定義しています。
iii

2018/01/30 04:29

ちなみにAWSのパスはusr/local/binです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問