ฉันได้สร้างสคริปต์ใน /etc/init.d/ ซึ่งจะต้องเรียกใช้สคริปต์อื่น ๆ จากผู้ใช้ (ไม่ใช่ผู้ใช้ที่มีสิทธิ์รูท) จากโฮมไดเรกทอรีของพวกเขาราวกับว่าพวกเขาเริ่มต้นมัน
ฉันเปิดใช้งานสคริปต์เหล่านี้ด้วย: sudo -b -u <username> <script_of_a_particular_user>
และมันใช้งานได้ แต่สำหรับสคริปต์ของผู้ใช้ทุกคนที่ยังคงทำงานอยู่ (ตัวอย่างเช่นสุนัขเฝ้าบ้านบางคน) ฉันเห็นกระบวนการ sudo หลักที่เกี่ยวข้องยังมีชีวิตอยู่และทำงานเป็นรูท สิ่งนี้สร้างความยุ่งเหยิงในรายการกระบวนการที่ใช้งานอยู่
ดังนั้นคำถามของฉันคือ: ฉันจะเปิดตัว (แยก) สคริปต์อื่นจากสคริปต์ทุบตีที่มีอยู่ในฐานะผู้ใช้รายอื่นและปล่อยให้เป็นกระบวนการกำพร้า (ยืนอยู่คนเดียว) ได้อย่างไร
คำอธิบายโดยละเอียดเพิ่มเติม:
โดยทั่วไปฉันพยายามให้ผู้ใช้รายอื่นบนเครื่องมีวิธีการรันสิ่งต่าง ๆ เมื่อระบบเริ่มต้นหรือปิดระบบโดยการเรียกใช้ไฟล์ปฏิบัติการที่พบในไดเรกทอรีย่อยตามลำดับที่พบในไดเรกทอรีบ้านของพวกเขา เนื่องจากฉันไม่พบวิธีอื่นใดที่ฉันเขียนสคริปต์ทุบตีของฉันที่ทำอย่างนั้นและฉันได้กำหนดค่าเป็นสคริปต์บริการ (โดยทำตามตัวอย่างโครงกระดูก) ใน /etc/init.d/ ดังนั้นเมื่อมันทำงาน ด้วยอาร์กิวเมนต์เริ่มต้นมันจะเปิดตัวทุกอย่างจากไดเรกทอรีเริ่มต้นขึ้นและเมื่อมันถูกเรียกใช้ด้วยอาร์กิวเมนต์หยุดมันจะเปิดตัวทุกอย่างจากไดเรกทอรี. shutDown ของผู้ใช้ทั้งหมดเช่นเดียวกับพวกเขา
หรือฉันก็สนใจถ้าฉันสามารถใช้วิธีแก้ปัญหาที่มีอยู่เพื่อแก้ปัญหานี้ได้
อัปเดต
ฉันดูรอบ ๆ แล้วฉันพบคำถามนี้:
/unix/22478/detach-a-daemon-using-sudo
คำตอบที่ยอมรับได้มีการใช้: ใช้sudo -u user sh -c "daemon & disown %1"
งานได้สำหรับฉันที่จะ แต่ฉันก็ลองโดยไม่ปฏิเสธ% 1และมันก็เหมือนกัน ดังนั้นนี่คือสิ่งที่เหมาะกับฉันตามที่คาดไว้:
sudo -u <username> bash -c "<script_of_a_particular_user> &"
คำถามเพิ่มเติมของฉันตอนนี้คือทำไมมันทำงานโดยไม่ปฏิเสธ? ฉันควรจะยังคงสายที่ปฏิเสธไม่ว่าจะเป็นกรณีพิเศษที่เป็นไปได้หรือไม่
อัพเดท 2
เห็นได้ชัดว่ามันใช้งานได้เช่นกัน:
su <username> -c "<script_of_a_particular_user> &"
มีความแตกต่างระหว่างการโทรนี้และการโทร sudo หรือไม่? ฉันรู้ว่านี่อาจเป็นคำถามที่แตกต่างทั้งหมด แต่เนื่องจากฉันกำลังค้นหาคำตอบที่นี่ตัวเองอาจจะเพื่อประโยชน์ของหัวข้อนี้ใครบางคนสามารถชี้แจงได้ที่นี่
อัปเดต 3
ทั้งสองวิธีด้วย su หรือ sudo ตอนนี้สร้างกระบวนการstartparใหม่(กระบวนการเดียวที่ทำงานเป็นรูท) หลังจากที่ฉันบูทเครื่อง มองเห็นได้ในรายการกระบวนการเป็น:
startpar -f -- <name_of_my_init.d_script>
ทำไมกระบวนการนี้ถึงเกิดขึ้น เห็นได้ชัดว่าฉันกำลังทำอะไรผิดเนื่องจากไม่มีสคริปต์ init.d อื่นที่กำลังทำงานอยู่
ปรับปรุง 4
ปัญหาเกี่ยวกับ startpar ได้รับการแก้ไข ฉันได้เริ่มต้นคำถามอื่นแล้ว:
กระบวนการ startpar หยุดทำงานเมื่อเริ่มกระบวนการจาก rc.local หรือ init.d
และคำถามอื่นเพื่อหารือเกี่ยวกับกลไกการเปิดตัวสำหรับผู้ใช้ที่ไม่มีสิทธิพิเศษเพิ่มเติม:
ให้ผู้ใช้ปกติ (ที่ไม่ใช่รูท) ด้วยการเริ่มต้นและปิดการทำงานอัตโนมัติ