カテゴリー
【CRONコマンド活用講座】AWS-CLIをCRONからシェルコマンドとして利用するときの注意点
※ 当ページには【広告/PR】を含む場合があります。
2022/04/30
CRONに分かるように自作コマンドは絶対パスを利用する
#/!bin/bash
#👇cronでは動かない
aws --version
#👇cronで動く
AWS_SHELL_PATH=/home/user/.local/bin
$AWS_SHELL_PATH/aws --version
$ which aws
/home/user/.local/bin
CRONスケジューラーで文字列からコマンド実行するときの注意点
tmp
hoge.sh
$ mkdir ~/tmp
$ cat << EOF > ~/tmp/hoge.sh
#!/bin/bash
echo 'HELLO CRON!' >> ~/tmp/hoge.txt
EOF
$ chmod +x ~/tmp/hoge.sh
$ . ~/tmp/hoge.sh
HELLO CRON!
crontab -e
#...中略
* * * * * $HOME/tmp/hoge.sh >/dev/null 2>&1
$HOME/tmp/hoge.txt
スクリプト内でevalを使う方式
hoge.sh
$ MY_CMD='echo "HELLO CRON FROM EVAL!"'
$ eval "$MY_CMD"
HELLO CRON FROM EVAL!
hoge.sh
#!/bin/bash
echo 'HELLO CRON!' >> ~/tmp/hoge.txt
MY_CMD='echo "HELLO CRON?"'
eval "$MY_CMD" >> ~/tmp/hoge.txt
スクリプト内でbash -cを使う方式
$ MY_CMD='echo "HELLO CRON FROM BASH-C!"'
$ bash -c "$MY_CMD"
HELLO CRON FROM BASH-C!
#!/bin/bash
echo 'HELLO CRON!' >> ~/tmp/hoge.txt
MY_CMD='echo "HELLO CRON!?"'
bash -c "$MY_CMD" >> ~/tmp/hoge.txt
スクリプト内で「$」を使う方式
$ MY_CMD='echo "HELLO CRON FROM DOLLAR!"'
$ $MY_CMD
"HELLO CRON FROM EVAL!"
eval
bash -c
#!/bin/bash
echo 'HELLO CRON!' >> ~/tmp/hoge.txt
MY_CMD='echo "HELLO CRON!??"'
$MY_CMD >> ~/tmp/hoge.txt
詳しく解説〜AWS-CLIがCronで動かない場合の対策
aws-cli
$ aws --version
aws-cli/1.18.192 Python/3.7.3 Linux/5.4.51-v7+ botocore/1.19.32
$ which aws
/home/user/.local/bin/aws
$ echo $PATH
/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
$ echo $HOME
/home/user
crontab -e
#...中略
* * * * * bash $HOME/aws_cron_test.sh
#!/bin/bash
STORE_DIR=/home/user/aws_cron_result.txt
cp /dev/null $STORE_DIR
echo $PWD >> $STORE_DIR
which aws >> $STORE_DIR
aws --version >> $STORE_DIR
echo $PATH >> $STORE_DIR
aws_cron_result.txt
/home/user
/usr/bin:/bin
aws-cli
#!/bin/bash
#👇実行ファイルをローカルインストールした場所を環境変数に追加
PATH=$PATH:/home/user/.local/bin
STORE_DIR=/home/user/aws_cron_result.txt
cp /dev/null $STORE_DIR
echo $PWD >> $STORE_DIR
which aws >> $STORE_DIR
aws --version >> $STORE_DIR
echo $PATH >> $STORE_DIR
/home/user
/home/user/.local/bin/aws
aws-cli/1.18.192 Python/3.7.3 Linux/5.4.51-v7+ botocore/1.19.32
/usr/bin:/bin:/home/user/.local/bin
$HOME/.aws/config
$HOME/.aws/credentials
$ aws --profile user s3 ls
#👇ユーザーのデフォルトのホームディレクトリにする
export HOME=/home/user
#👇クレデンシャルファイルを指定する
export AWS_CONFIG_FILE="/home/user/.aws/config"
#👇IAM情報の直書き
export AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXXXXXXX
export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXX
まとめ
+ eval は最終手段に使ったほうがよい
+ できるだけ bash -c で組めるかを検討する
+ $ はダブルクォーテーションの有無に注意する
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー