วิธีเรียกใช้ tmux / หน้าจอด้วย systemd> 230


19

ฉันรัน 16.04 และsystemdตอนนี้ฆ่าtmuxเมื่อผู้ใช้ยกเลิกการเชื่อมต่อ ( สรุปการเปลี่ยนแปลง )

มีวิธีเรียกใช้tmuxหรือscreen(หรือโปรแกรมที่คล้ายกัน) ด้วยsystemd230 หรือไม่? ฉันอ่านการถกเถียงอย่างดุเดือดเกี่ยวกับข้อดีข้อเสียของพฤติกรรม แต่ไม่แนะนำวิธีแก้ปัญหา

(ฉันเห็นพฤติกรรมใน 229 เช่นกัน)


1
มันแปลกมาก - ฉันมีsystemd-229-4ubuntu7(จาก xenial-updates) และฉันไม่เห็นพฤติกรรมนี้ อย่างไรก็ตามพฤติกรรมนี้ได้ถูกเปลี่ยนกลับในเดเบียนsystemd-230-2แล้วดังนั้นมันอาจจะถูกเปลี่ยนกลับใน Ubuntu เร็ว ๆ นี้เช่นกัน
MvanGeest

mirbsd.org/~tg/Debs/dists/jessie/wtf/Pkgs/mirabilos-supportมีแพ็คเกจป้องกัน systemd- * ที่อนุญาตให้คุณติดตั้งและใช้ sysvinit ก่อนหน้านี้
mirabilos

คำตอบ:


1

การใช้Ubuntu 18.04กับsystemd รุ่น 237ไม่มีวิธีแก้ปัญหาที่แนะนำสำหรับฉัน

ทางออกสำหรับฉันคือการ

  • แก้ไข /etc/systemd/logind.conf
  • uncomment KillExlcudeUsers
  • เพิ่มรายการที่คั่นด้วยช่องว่างของผู้ใช้ (เช่นKillExlcudeUsers=root user1 user2)

19

ทางออกที่เหมาะสมคือการปิดการใช้งาน systemd พฤติกรรมของระบบที่กระทำผิด

แก้ไข/etc/systemd/logind.conf( คุณต้อง sudoแน่นอน) และตั้งค่า

KillUserProcesses=no

/etc/systemd/logind.conf.d/99-dont-kill-user-processes.confนอกจากนี้คุณยังสามารถใส่การตั้งค่านี้ในแฟ้มต่างหากเช่น

systemd-logind.serviceแล้วรีสตาร์ท

sudo systemctl restart systemd-logind

4
วิธีการแก้ไขปัญหาที่เหมาะสมสำหรับหน่วยหนึ่งเพื่อตั้งค่าการตั้งค่าความกว้างของระบบอย่างไร
jpath

เพราะอย่างที่คุณเห็นได้จากการอ่านคำถามเพียงอย่างเดียวให้พูดคุยเรื่องอื่นที่อื่นเกี่ยวกับเรื่องนี้ว่าคำถามอ้างอิงทางอ้อมโดยลำพังนี่ไม่ใช่เฉพาะแอปพลิเคชันเดียว นี่คือจุดที่เป็นตัวหนาในคำถาม
JdeBP

loginctl enable-linger <user>คุณเพียงแค่ต้องเปิดการใช้งานเอ้อระเหยสำหรับผู้ใช้ผ่านทาง จากman loginctl: "หากเปิดใช้งานสำหรับผู้ใช้ที่เฉพาะเจาะจงผู้จัดการผู้ใช้จะถูกวางไข่สำหรับผู้ใช้เมื่อบูตและเก็บไว้หลังจากออกจากระบบซึ่งจะช่วยให้ผู้ใช้ที่ไม่ได้เข้าสู่ระบบเพื่อเรียกใช้บริการที่ใช้งานมานาน"
Adrian Günter

Ubuntu 18.04 ที่นี่ สิ่งนี้ไม่ทำงานแม้ว่าจะรีบูตแล้วก็ตาม การเปิดใช้งานการควบคุมไม่ได้เกิดขึ้น
Pa_

11

จากคำตอบของ @ Rinzwind และได้แรงบันดาลใจจากคำอธิบายหน่วยสิ่งที่ดีที่สุดที่ฉันสามารถหาได้คือใช้ TaaS (Tmux เป็นบริการ) - ตัวอย่างที่แยกออกมาโดยทั่วไปของการtmuxติดตั้งซ้ำหนึ่งครั้ง

# cat /etc/systemd/system/tmux@.service

[Unit]
Description=tmux default session (detached)
Documentation=man:tmux(1)

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/tmux new-session -d -s %I
ExecStop=/usr/bin/tmux kill-server
KillMode=none

[Install]
WantedBy=multiplexer.target

# systemctl start tmux@instanceone.service
# systemctl start tmux@instancetwo.service
# tmux list-sessions

instanceone: 1 windows (created Sun Jul 24 00:52:15 2016) [193x49]
instancetwo: 1 windows (created Sun Jul 24 00:52:19 2016) [193x49]

# tmux attach-session -t instanceone

(instanceone)#

นี่มันเรียบร้อย แต่ฉันทำไม่ได้สำหรับชีวิตของฉันคิดออกว่าทำไมคุณถึงใช้มัน! :)
sarnold

5
@sarnold: เพื่อให้สามารถควบคุมแอปพลิเคชันที่เริ่มต้นด้วยคอนโซล แต่คาดว่าจะทำงานในเวลาบูต Minecraft เป็นตัวอย่างหนึ่ง
WoJ

5

RemainAfterExit =

รับค่าบูลีนที่ระบุว่าจะถือว่าบริการนั้นแอ็คทีฟหรือไม่แม้ว่ากระบวนการทั้งหมดจะออกจากกระบวนการก็ตาม ค่าเริ่มต้นเป็น no


ขอบคุณ ฉันยอมรับและ +1 คำตอบของคุณเนื่องจากเป็นแกนหลักของโซลูชัน คุณจะรู้หรือไม่ว่ามันสามารถใช้งานได้ในโหมดโต้ตอบ (โดยการเปิดใช้tmuxแบบโต้ตอบซึ่งต่างกับคำตอบของฉัน)
WoJ

สงสัยมัน. systemd อาจจะไม่สนใจเกี่ยวกับ tmux ของคุณจนกว่าคุณจะบอก systemd ว่ามันควร :-P (วิธีการของพวกเขาในเรื่องนี้ค่อนข้างเป็นแบบใจเดียวกัน .... ดูเหมือนว่ามันเป็นวิธีของพวกเขาหรือไม่มีทาง) คุณต้องการคำอธิบายหน่วยเช่นคุณ โพสต์ รู้สึกอิสระที่จะยอมรับของคุณและ / หรือขยายของคุณ ;-) ฉันไม่ต้องการตัวแทน>: - D
Rinzwind

3
คำตอบนี้ต้องการรายละเอียดเพิ่มเติมเช่นสถานที่ที่จะใช้การตั้งค่านั้น
kasperd

1
แน่นอนว่า แต่คำตอบที่เป็นไปได้คัดลอก / วางของหน้าคู่มือ ;-)
Rinzwind

1
@WoJ คุณสามารถสร้างชื่อแทนtmuxเพื่อเริ่มต้นเป็นsystemd-run --remain-after-exit tmux(หรืออาจใช้กับ--scope --userธงก็ได้)
Debilski

2

คุณจำเป็นต้องตั้งค่าTypeการให้บริการเพื่อforkingตามที่อธิบายไว้ที่นี่

สมมติว่าบริการที่คุณต้องการที่จะทำงานในที่เรียกว่าscreen minecraftจากนั้นคุณจะเปิดminecraft.serviceในโปรแกรมแก้ไขข้อความและเพิ่มหรือแก้ไขรายการภายใต้หัวข้อType=forking[Service]


0

ตาม/unix//a/287282/117599เรียกtmuxใช้

systemd-run --user --scope tmux

ควรทำเคล็ดลับ


น่าเสียดายที่สิ่งนี้ดูเหมือนว่าจะไม่สามารถใช้งานได้ใน 18.10 จักรวาล
taneli
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.