Saya telah membuat skrip di /etc/init.d/ yang harus menjalankan beberapa skrip lain dari pengguna lain (non-root privilege) dari direktori home mereka, seolah-olah mereka memulainya.
Saya meluncurkan skrip ini dengan: sudo -b -u <username> <script_of_a_particular_user>
Dan itu berhasil. Tetapi untuk setiap skrip pengguna yang terus berjalan (misalnya beberapa pengawas) saya melihat proses sudo induk yang sesuai, masih hidup dan berjalan sebagai root. Ini membuat kekacauan dalam daftar proses aktif.
Jadi pertanyaan saya adalah: Bagaimana saya bisa meluncurkan (bercabang) skrip lain dari skrip bash yang ada sebagai pengguna lain dan membiarkannya sebagai proses yatim (berdiri sendiri)?
Penjelasan lebih rinci:
Saya pada dasarnya mencoba memberikan kepada pengguna lain alat untuk menjalankan hal-hal pada saat sistem mulai atau sistem mati dengan menjalankan file yang dapat dieksekusi yang ditemukan di masing-masing subdirektori yang ditemukan di direktori home mereka, bernama .startUp dan .shutDown. Karena saya tidak menemukan cara lain untuk melakukan itu, saya menulis skrip bash saya yang melakukan hal itu dan saya telah mengkonfigurasinya sebagai skrip layanan (dengan mengikuti contoh kerangka) di /etc/init.d/ sehingga ketika dijalankan dengan argumen mulai, ia meluncurkan semuanya dari direktori .startUp dan ketika dijalankan dengan argumen berhenti, ia meluncurkan semuanya dari direktori .shutDown semua pengguna sebagai mereka.
Atau saya juga tertarik jika saya bisa menggunakan beberapa solusi yang ada untuk menyelesaikan masalah ini.
UPDATE
Saya telah melihat-lihat sedikit dan saya menemukan pertanyaan ini:
/unix/22478/detach-a-daemon-using-sudo
Jawaban yang diterima di sana, untuk digunakan sudo -u user sh -c "daemon & disown %1"
:, berfungsi untuk saya. Tetapi saya juga mencoba tanpa menolak% 1 dan itu sama. Jadi inilah yang bekerja untuk saya seperti yang saya harapkan:
sudo -u <username> bash -c "<script_of_a_particular_user> &"
Pertanyaan tambahan saya sekarang adalah, mengapa itu bekerja tanpa disangkal? haruskah saya tetap meninggalkan telepon yang ditolak , untuk beberapa kasus khusus yang potensial?
PEMBARUAN 2
Tampaknya ini juga berfungsi:
su <username> -c "<script_of_a_particular_user> &"
Apakah ada perbedaan antara panggilan ini dan panggilan sudo? Saya tahu ini berpotensi pertanyaan yang berbeda. Tetapi karena saya sendiri yang menemukan jawabannya di sini, mungkin demi topik ini seseorang dapat mengklarifikasi hal ini di sini.
UPDATE 3
Kedua metode ini dengan su atau sudo sekarang menghasilkan proses startpar baru (proses tunggal yang berjalan sebagai root) setelah saya mem-boot mesin. Terlihat dalam daftar proses sebagai:
startpar -f -- <name_of_my_init.d_script>
Mengapa proses ini muncul? Jelas saya melakukan sesuatu yang salah karena tidak ada skrip init.d lain yang menjalankan proses ini.
UPDATE 4
Masalah dengan startpar teratasi. Saya telah memulai pertanyaan lain untuk itu:
proses startpar dibiarkan menggantung ketika memulai proses dari rc.local atau init.d
Dan pertanyaan lain untuk membahas lebih lanjut mekanisme peluncuran untuk pengguna yang tidak memiliki hak istimewa:
Memberikan pengguna normal (non-root) kemampuan inisialisasi dan shutdown yang dijalankan secara otomatis
Anda dapat menggunakan start-stop-daemon dari init.d dengan
--user
opsi.sumber
Saya belum sepenuhnya menguji ini, tapi saya pikir itu seperti:
saat startup dan kemudian
saat mematikan.
Menangani skrip .shutDown dapat dilakukan dengan sesuatu seperti hal startup, tetapi Anda tidak dapat memastikan bahwa skrip dijalankan hingga berakhir karena shutdown akan tetap terjadi :-)
harus melakukan trik, mungkin Anda harus memasukkan beberapa pengalihan input, tetapi kemudian Anda harus khawatir tentang file log yang sedang diisi.
sumber
Sudahkah Anda mencoba menggunakan
su
?-c
memberitahu su untuk mengeksekusi perintah, dan parameter terakhir adalah pengguna untuk menjalankannya sebagai.sumber