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

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

新規登録して質問してみよう
ただいま回答率
85.46%
AWS(Amazon Web Services)

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

Q&A

解決済

1回答

4513閲覧

cronでbashコマンドを定期実行してAWSCLIを実行させようとすると実行できない

hi-roto

総合スコア8

AWS(Amazon Web Services)

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

0グッド

0クリップ

投稿2021/09/09 10:34

詰まっているところ

EC2上のコマンド上で手動で、bash xxxx.shを実行すると、問題なく処理が実行できます。
しかし、同じものをcronに設定して実行すると、うまく実行されません。
cronについては、echo 1 >> ~/test.txtという簡単な処理を実行させてたところ、正常に動作しています。
AWsCLIが入ったシェルスクリプトだと処理がcronは作動してるのですが、AWSCLIが実行されない状況です。

実行環境
amazon-linux-2
Amazon Linux 2 AMI

[ec2-user@ip-xxxxxxxxxx ~]$ bash test.sh うまく処理が実行される [ec2-user@ip-xxxxxxxxxx ~]$ crontab -e

cron

130 * * * * /home/ec2-user/test.sh 2AWSCLIが実行されない

test.shの中身は以下のとおりです。

#!/bin/sh #自動バックアップしている最新のスナップショットを取得 SNAPSHOT_NAME=`aws rds describe-db-snapshots --query "reverse(sort_by(DBSnapshots[?DBInstanceIdentifier=='xxxxxxxxxxxx'],&SnapshotCreateTime))[0].DBSnapshotIdentifier"` # s/置換条件/置換文字/ 置換条件を置換文字に変換する。最後にgを付けた場合は置換条件に当てはまるすべての文字列が置換される SNAPSHOT_NAME=`echo $SNAPSHOT_NAME | sed "s/\"//g"` #スナップショットの復元 マスキング用RDSの作成 aws rds --no-cli-pager xxxxxxxxxxxxxxxxx \ --db-snapshot-identifier $SNAPSHOT_NAME \ --db-instance-identifier "xxxxxxxxxxxxxxxx" \ --availability-zone "ap-northeast-1a" \ --db-subnet-group-name "xxxxxxxxxxxxxx" \ --vpc-security-group-ids "xxxxxxxxxxxxxx" \ --db-parameter-group-name "aws-xxxxxxx-mysql57" \ --db-instance-class db.t3.micro \ --no-multi-az \ # RDSが作成するまで待機 aws rds wait db-instance-available --db-instance-identifier "xxxxxxxxxxxxxxxxxx" [処理] # RDSからmysqlコマンドでダンプ取る処理を記載しています。 # ここの処理は実行されるのですが、AWSCLIが実行されていないため、空のダンプされたデータしかない状況です。 # DBの削除 aws rds delete-db-instance \ --db-instance-identifier "xxxxxxxxxxxxxxxx" \ --skip-final-snapshot

といった内容のものです。

ファイル権限 実行権限も付与しています。

[ec2-user@ip-xxxxxxx ~]$ ls -l test.sh -rwxrwx--x 1 ec2-user ec2-user 2387 xxxxxxx test.sh

ファイルパス クーロンの記載にはフルパスで指定しています。

[ec2-user@ip-xxxxxxx ~]$ pwd test.sh /home/ec2-user

AWSCLIはcronでは使えないのでしょうか?
何かアドバイスいただければ幸いです。
よろしくお願いします。

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

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

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

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

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

yu_1985

2021/09/09 14:37

すでに書かれてますが、使えないということはありません。 どこが問題なのかそれだけでは検討がつかないので、どこかのファイルに標準出力の内容を記録して調べてみてください。 あと今回の問題には関係ありませんが、運用に使うスクリプトをホームディレクトリに置くのは避けたほうが賢明です。
hi-roto

2021/09/09 17:04

ご回答いただきありがとうございます。 結論ですが、awsにパスが通っていなかったため、コマンドが実行されていませんでした。 フルパスを指定して実行したところ処理が実行しました。 スクリプトの設置場所についてもご指摘いただきありがとうごいました。 またよろしくお願いします。
guest

回答1

0

ベストアンサー

cronでも使えます。
おそらくは環境変数を読み込んでないとかそういう類いの不具合だと思います。クレデンシャル情報(アクセスキー、シークレットキー、リージョン情報など)を環境変数として読み込ませる必要があると思います。

参考)
https://qiita.com/nakamto/items/a2073b081e5c26532bd3

"aws cli cron 動かない"でググればワラワラと同じような記事が出てきますので、こちらを参考にするといいと思います。

投稿2021/09/09 10:50

AbeTakashi

総合スコア4594

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

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

hi-roto

2021/09/09 17:05

ご回答いただきありがとうございます。 結論ですが、awsにパスが通っていなかったため、コマンドが実行されていませんでした。 フルパスを指定して実行したところ処理が実行しました。 ご教示いただいた記事から色々調べて、解決に至りました。 また今後ともよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問