Apa cara yang baik untuk menjalankan skrip shell sebagai pengguna yang berbeda. Saya menggunakan etsa Debian, dan saya tahu pengguna mana yang ingin saya tiru.
Jika saya melakukannya secara manual, saya akan melakukan:
su postgres
./backup_db.sh /tmp/test
exit
Karena saya ingin mengotomatiskan proses, saya perlu cara untuk menjalankan backup_db.sh sebagai postgres (mewarisi lingkungan, dll)
Terima kasih!
-
(atau--login
) bersama dengan--command, -c
tidak benar-benar memulai sesi login, karena-c
selalu memaksa shell non-login.- postgress
akan muncul di akhir perintah. Dari halaman manual:When - is used, it must be specified before any username. For portability it is recommended to use it as last option, before any username. The other forms (-l and --login) do not have this restriction.
Jika target pengguna untuk menjalankan nologin shelll telah ditentukan, maka Anda dapat menggunakan opsi -s untuk menentukan shell:
Lihat pertanyaan berikut: jalankan skrip sebagai pengguna yang memiliki shell nologin
sumber
Untuk mengotomatiskan ini pada jadwal Anda bisa memasukkannya ke dalam crontab pengguna. Pekerjaan Cron tidak akan mendapatkan lingkungan penuh, tetapi mungkin lebih baik untuk meletakkan semua variabel env yang Anda butuhkan dalam skrip itu sendiri.
Untuk mengedit crontab pengguna:
sumber
Ini harus merupakan read- setuid pada skrip shell yang informatif
Jika Anda menjalankan su dengan
- username
urutan argumen, " " itu akan membuat shell login bagi pengguna untuk memberikan lingkungan yang sama seperti pengguna. Biasanya, digunakan untuk menjalankan skrip Anda dengan lingkungan rumah Anda dengan cepat dari login yang berbeda.sumber
Coba halaman su su:
su -c script_run_as_postgres.sh - postgres
Biasanya, Anda bisa menggunakan sudo untuk memungkinkan Anda menjalankan comman itu sebagai postgres tanpa kata sandi. Butuh beberapa pengaturan di / etc / sudoers Anda.
sumber
Metode "su -c ..." diposting oleh orang lain adalah metode yang bagus. Untuk otomatisasi, Anda dapat menambahkan skrip ke crontab pengguna yang Anda perlukan untuk mengeksekusi.
sumber
Jika pengguna sudah memiliki entri untuk sudo dan Anda tidak tahu kata sandi superuser maka Anda dapat mencoba yang berikut: Yang ini me-restart postgres yang diinisialisasi di /data/my-db/pgsql/9.6/data
sumber
Anda juga bisa menggunakan:
sumber