मुझे लगता है कि दोनों -cमापदंडों ( suऔर bash) को कम से कम उद्धृत करना होगा।
su - username -c "/usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'"
इसके अलावा -अंतिम होने की उम्मीद है और यहां वांछनीय नहीं हो सकता है (देखें man su)।
कुछ और टिप्पणी। आपके जैसे एक-शॉट कमांड के लिए एक बेहतर विकल्प sudo हो सकता है, लेकिन जरूरी नहीं:
sudo -iu username /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'
विशेष रूप से, आप उद्धृत करने के एक कम स्तर का उपयोग कर सकते हैं sudo।
एक और बात जिससे आप सावधान रहना चाहते हैं वह यह है कि विशेषाधिकार प्राप्त संदर्भ में पूर्ण पथ के बिना कमांड निष्पादित हो रही है। यह आपके आदेश में पथ के लिए su(या sudo) लेकिन इसके लिए भी है bash। आप इसे सही कर रहे हैं screen।
बस निम्नलिखित का परीक्षण किया और यह अच्छी तरह से काम करता है। मुझे लगता -है कि आपकी मूल पंक्ति में मुख्य मुद्दा यह है:
/bin/su username -c "/usr/bin/screen -dmS test bash -c '/home/username/test.sh; exec bash'"
बुराई टिप्पणी: तुम tmuxएक कोशिश क्यों नहीं देते ? मैंने हाल ही में स्विच किया है और कभी पीछे मुड़कर नहीं देखा। केवल एक चीज मैं तुरंत बदलने के लिए की जरूरत उपसर्ग कुंजी संयोजन था जिसमें tmuxडिफ़ॉल्ट Ctrl+ B- करने के लिए जीएनयू वापस screenकी Ctrl+ A।
यह आपकी विंडो को लगभग मनमाने ढंग से पैन (लंबवत और क्षैतिज रूप से) में विभाजित करने की अनुमति देता है और इसकी कॉन्फ़िगरेशन फ़ाइल प्रारूप (स्थिति बराबर के लिए एक सहित) वास्तव में मनुष्यों के लिए समझदार है। बेशक tmuxउतना ही अच्छा है screenजब आप बस कुछ प्रोग्राम / स्क्रिप्ट चलाना चाहते हैं जो मूल रूप से पृष्ठभूमि में डेमन के रूप में नहीं लिखा गया है। यदि आप टर्मिनल मल्टीप्लेक्सर के साथ बातचीत करने का इरादा रखते हैं, हालांकि, मैं गर्मजोशी से सलाह देता हूं tmux।
suयाsudo?