SSHログインと同じ環境でCronを実行するようにします。

SSHログインと同じ環境でCronを実行するようにします。

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.shPATH

# 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」に対応するファイルはありますか?シェル起動ファイルに関する追加情報。

おすすめ記事