解決策 1:
スクリプトを別のユーザーとして 1 つのコマンドとして実行するには、次を実行します。
/bin/su -c "/path/to/backup_db.sh /tmp/test" - postgres
Breaking it down:
/bin/su : switch user
-c "/path/to..." : command to run
- : option to su, make it a login session (source profile for the user)
postgres : user to become
このようなスクリプトでは常にフル パスを使用することをお勧めします。 su を実行したときに正しいディレクトリに移動できるとは限りません (誰かがホーム ディレクトリを変更した可能性があります)。また、偏執狂なので、常に su (/bin/su) へのフル パスを使用します。誰かがあなたのパスを編集して、侵害されたバージョンの su を使用させる可能性があります。
解決策 2:
実行するターゲット ユーザーに nologin シェルが定義されている場合は、-s オプションを使用してシェルを指定できます。
/bin/su -s /bin/bash -c '/path/to/your/script' testuser
次の質問を参照してください:nologin シェルを持つユーザーとしてスクリプトを実行します
解決策 3:
スケジュールに従ってこれを自動化するには、ユーザーの crontab に入れることができます。ただし、Cron ジョブは完全な環境を取得することはできませんが、必要なすべての環境変数をスクリプト自体に配置することをお勧めします。
ユーザーの crontab を編集するには:
sudo crontab -u postgres -e
解決策 4:
これは参考になるはずです -- シェル スクリプトの setuid
su を実行すると "- username
" 引数シーケンスを使用すると、ユーザーがユーザーと同じ環境を与えるためのログイン シェルが作成されます。通常は、別のログインからホーム環境でスクリプトをすばやく実行するために使用されます。
解決策 5:
su マンページを試してください:
su -c script_run_as_postgres.sh - postgres
または、sudo を使用して、そのコマンドだけをパスワードなしで postgres として実行できるようにすることもできます。ただし、/etc/sudoers でのセットアップが必要です。