cronでは環境変数が設定されない

cronでは環境変数が設定されないので、実行スクリプトかcron自身で環境変数が設定されるようにしなければいけない。

実行スクリプトで対応

実行スクリプトで対応する方法は以下の2通り

  • スクリプトのshebangで、ログインシェルとして動くように #!/bin/bash -l とする
  • スクリプトの冒頭で source /home/username/.bash_profile を実行する

cronで対応する

cronで対応する方法は以下の2通り

  • bash -l -c 'コマンド' とする。-lでログインシェルとして動くようになる。
  • source ~/.bash_profile を書いてから目的のコマンドを記載する。

00 00 * * * postgres bash -l -c 'psql -p 5432 dbname -c "VACUUM ANALYZE"'
00 00 * * * postgres source ~/.bash_profile;psql -p 5432 dbname -c "VACUUM ANALYZE"

スクリプトを作らず直接cronにコマンドを書くことを考慮すると、cronで対応するように統一するのが良い。