Saya pikir kedua -c
parameter ( su
dan 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 bash
dalam 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 tmux
mencobanya? 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 tmux
defaultnya 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 tmux
sama baiknya dengan screen
ketika 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
.
su
atausudo
?sudo
bukan 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.sudo su -
...sudo
(lakukan superuser),su
(beralih pengguna) ... ide bagus tentang .confsudo
dapat memulai shell login dengan baik menggunakan-i
.Coba
sudo -u username
alih-alihsu - username
sumber
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.
Sumber: http://realtechtalk.com/How_to_start_screen_in_bash_script_or_from_etcrclocal_on_startup_as_a_specific_user-1980-articles
sumber