2022年8月15日月曜日

Beanstalkをamazon linux2に上げたら、cronでrakeコマンドが叩けなくなった件

 今まで、Amazon linuxベースで、Beanstalkを展開していたら、下記のようにシェルスクリプトを書いておけばrailsのタスクを実行できていましたよね。

#!/usr/bin/env bash
set -xe
EB_SCRIPT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k script_dir)
EB_SUPPORT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k support_dir)
EB_DEPLOY_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_deploy_dir)
. $EB_SUPPORT_DIR/envvars
. $EB_SCRIPT_DIR/use-app-ruby.sh

cd /var/app/current
bundle exec rake ***:*****

ところがAmazon linux2になったら、/opt/elasticbeanstalk/bin/get-configの情報が変わって、script_dirが無いよ!というエラーがでるようになりました。

環境変数はAWSが公表している通り、下記ページを参考にすれば読み込むことができて、
下のように環境変数読み込み部分を削除してしまえば、サーバにログインしてから下記ファイルを直接叩いたら、動くことが確認できました。
#!/usr/bin/env bash
cd /var/app/current
bundle exec rake ***:*****
しかしながら、cronで叩くと、エラーがでて動きません。
/usr/bin/env: ruby: No such file or directory

どうしたものかと試行錯誤の結果、
crontabファイルのPATH指定部分に、rubyのディレクトリを追加
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/elasticbeanstalk/.rbenv/shims
かつ、シェルスクリプトで上記AWS公表の環境変数の更新をかけたら動きました。
#!/usr/bin/env bash
source /etc/profile.d/sh.local
cd /var/app/current
bundle exec rake ***:*****

なんかBeanstalk Amazon linux2について、CronとかRakeタスクの情報がぜんぜんないのですが、みなさんあたりまえに対応しているのか、そもそもサーバで叩かないのがセオリーなのか、どうなのでしょう・・・・・?