Jalankan sesi layar saat boot dari rc.local

9

Saya mencoba menjalankan layar terpisah di bawah pengguna tertentu di rc.local saat boot. Kode di bawah ini adalah yang saya miliki sejauh ini, tetapi tidak berfungsi untuk saya. Bagian su tampaknya memberi saya kesalahan.

su - username -c /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'
ATLChris
sumber

Jawaban:

13

Saya pikir kedua -cparameter ( sudan bash) harus dikutip minimum.

su - username -c "/usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'"

Juga -diharapkan menjadi yang terakhir dan mungkin tidak diinginkan di sini (lihat man su).


Beberapa komentar lagi. sudo bisa menjadi pilihan yang lebih baik untuk perintah sekali pakai seperti milik Anda, tetapi tidak harus:

sudo -iu username /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'

Secara khusus, Anda dapat menggunakan satu tingkat kutipan dengan lebih sedikit sudo.

Hal lain yang Anda ingin berhati-hati adalah menjalankan perintah tanpa jalur absolut dalam konteks istimewa. Ini berlaku untuk su(atau sudo) tetapi juga untuk path ke bashdalam perintah Anda. Anda melakukannya dengan benar screen.

Baru saja menguji yang berikut ini dan berfungsi dengan baik. Saya pikir -ini adalah masalah utama di baris asli Anda:

/bin/su username -c "/usr/bin/screen -dmS test bash -c '/home/username/test.sh; exec bash'"

Komentar jahat: mengapa Anda tidak tmuxmencobanya? Saya baru saja beralih dan tidak pernah melihat ke belakang. Satu-satunya hal yang saya butuhkan untuk mengubah segera adalah kombinasi tombol awalan yang pada tmuxdefaultnya Ctrl+ B- kembali ke GNU screen's Ctrl+ A.

Ini memungkinkan pemisahan jendela Anda ke dalam jumlah panel yang hampir sewenang-wenang (secara vertikal dan horizontal) dan format file konfigurasinya (termasuk yang untuk par status) sebenarnya dapat dipahami oleh manusia. Tentu saja tmuxsama baiknya dengan screenketika Anda hanya ingin menjalankan beberapa program / skrip yang awalnya tidak ditulis sebagai daemon di latar belakang. Jika Anda berniat untuk berinteraksi dengan terminal multiplexer, saya sangat merekomendasikan tmux.

0xC0000022L
sumber
Saya akan coba ini dalam beberapa. Skrip yang saya jalankan menggunakan jalur absolut, jadi apakah Anda akan merekomendasikan suatau sudo?
ATLChris
1
sudobukan pilihan yang baik jika dijalankan dari rc.local di mana Anda sudah root, karena Anda akan kehilangan shell login. Di samping catatan, lihat /etc/init/tty1.conf- ganti getty dengan layar di sini.
aquaherd
@ aquaherd: itu yang ada dalam pikiran saya ketika saya menulis tetapi tidak harus . Petunjuknya, sungguh, adalah seperti biasa sudo su -... sudo(lakukan superuser), su(beralih pengguna) ... ide bagus tentang .conf
0xC0000022L
1
Saya harus mengatakan, saya memberi +1 pos ini hanya karena komentar jahat Anda. Aku menyukainya! Ini pengganti yang bagus untuk layar, karena seseorang dapat memaksanya untuk memulai sesi baru.
Fisikawan Kuantum
@ aquaherd sudodapat memulai shell login dengan baik menggunakan -i.
muru
1

Coba sudo -u usernamealih-alihsu - username

ramalan201
sumber
1

Inilah yang saya gunakan, saya menemukan itu menjadi yang paling bersih dan paling sederhana (diuji bekerja sendiri):

Ganti "pengguna" dengan pengguna untuk menjalankannya sebagai. Ganti "nameyouchoose" sebagai nama sesi layar Ganti "/script/start.bash" ke jalur skrip Anda.

/usr/bin/sudo -u user /usr/bin/screen -dmS nameyouchoose /script/start.bash

Sumber: http://realtechtalk.com/How_to_start_screen_in_bash_script_or_from_etcrclocal_on_startup_as_a_specific_user-1980-articles

Areeb Soo Yasir
sumber