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.
suatausudo?