Ubuntu EC2インスタンスとしてSSHを介して実行し(ユーザー権限でubuntu
)実行すると、正常に実行されるスクリプトがあります。
サーバーの起動時にこれが起こりたいので、cronに以下を追加します。
@reboot sleep 10 && /home/ubuntu/start.sh
ただし、cronを実行すると状況はPATH
同じではなく、バイナリがロードされず、一部のコマンドが失敗します。
$ echo $PATH
/home/ubuntu/.nvm/versions/node/v4.2.6/bin:/home/ubuntu/bin:/home/ubuntu/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
# in start.sh
echo "path $PATH" >> start.logs
# will log 'path /usr/bin:/bin'
私は少なくとも部分的にビルドが発生する場所だと信じているので、スクリプトを追加しようとしましたが、source /home/ubuntu/.bashrc
それほど変わらないようです。start.sh
PATH
# in start.sh
source /home/ubuntu/.bashrc
echo "path $PATH" >> start.logs
# will still log 'path /usr/bin:/bin'
ubuntu
また、Cronがで実行されることを確認しましたがroot
、 でログインしたcronジョブを編集した後でそうです。ubuntu
SSH経由でサーバーにログインした後と同じ環境でcronを実行する簡単な方法はありますか?
ベストアンサー1
通常、環境変数はに定義する必要があり~/.profile
、~/.bash_profile
そのファイルが存在する場合、ログインシェルはbashです。したがって、このファイルはcronジョブからロードされます。
@reboot . ~/.profile; sleep 10 && /home/ubuntu/start.sh
~/.bashrc
インタラクティブなカスタマイズ専用であるため、非対話型でロードしないでください。とにかく通常は機能しません。に環境変数が定義されている場合は、.bashrc
まずそれを修正してください。
環境変数を設定する別の場所は、~/.pam_environment
変数を定数値に設定したい場合です(このファイルではシェルコマンドを実行できません)。
バラより環境変数を設定するための最良の distro/shell 独立した方法は何ですか?、ログインシェルと非ログインシェルの違いは何ですか?そしてすべてのシェルが読める「.bashrc」に対応するファイルはありますか?シェル起動ファイルに関する追加情報。