Làm cách nào để chạy tmux / màn hình với systemd> 230?


19

Tôi chạy 16.04 và systemdbây giờ sẽ chết tmuxkhi người dùng ngắt kết nối ( tóm tắt về thay đổi ).

Có cách nào để chạy tmuxhoặc screen(hoặc bất kỳ chương trình tương tự) với systemd230 không? Tôi đọc tất cả những tranh cãi gay gắt về ưu và nhược điểm của hành vi nhưng không có giải pháp nào được đề xuất.

(Tôi cũng thấy hành vi trong 229)


1
Điều đó thật kỳ quặc - Tôi có systemd-229-4ubuntu7(từ cập nhật xenial) và tôi không thấy hành vi này. Dù sao, hành vi này đã được hoàn nguyên trong Debiansystemd-230-2 , vì vậy nó cũng có thể sẽ được hoàn nguyên trong Ubuntu sớm.
MvanGeest

mirbsd.org/~tg/Debs/dists/jessie/wtf/Pkgs/mirabilos-support có các gói ngăn chặn systemd- * cho phép bạn cài đặt và sử dụng sysvinit như trước
mirabilos

Câu trả lời:


1

Sử dụng Ubuntu 18.04 với phiên bản systemd 237 , không có giải pháp được đề xuất nào phù hợp với tôi.

Giải pháp hiệu quả với tôi là

  • chỉnh sửa /etc/systemd/logind.conf
  • không chú ý KillExlcudeUsers
  • thêm một danh sách người dùng được phân tách bằng dấu cách (ví dụ KillExlcudeUsers=root user1 user2:)

19

Giải pháp thích hợp là vô hiệu hóa hệ thống hành vi vi phạm trên toàn hệ thống.

Chỉnh sửa /etc/systemd/logind.conf(tất nhiên bạn phải sudo ) và thiết lập

KillUserProcesses=no

Bạn cũng có thể đặt thiết lập này trong một file riêng biệt, ví dụ /etc/systemd/logind.conf.d/99-dont-kill-user-processes.conf.

Sau đó khởi động lại systemd-logind.service.

sudo systemctl restart systemd-logind

4
Làm thế nào là giải pháp thích hợp cho một vấn đề cụ thể cho một đơn vị để thiết lập một số cài đặt toàn hệ thống?
jpath

Bởi vì, như bạn có thể thấy ngay cả khi chỉ đọc câu hỏi, hãy để một mình tất cả các cuộc thảo luận khác về vấn đề này mà câu hỏi gián tiếp tham chiếu, điều này không cụ thể cho một ứng dụng. Đây là một điểm thậm chí in đậm trong câu hỏi.
JdeBP

Bạn chỉ cần kích hoạt kéo dài cho người dùng thông qua loginctl enable-linger <user>. Từ man loginctl: "Nếu được bật cho một người dùng cụ thể, trình quản lý người dùng sẽ sinh ra cho người dùng khi khởi động và được giữ xung quanh sau khi đăng xuất. Điều này cho phép người dùng không đăng nhập để chạy các dịch vụ chạy dài."
Adrian Günter

Ubuntu 18.04 tại đây. Điều này không hoạt động, ngay cả sau khi khởi động lại. Cho phép kéo dài cũng không.
Pa_

11

Dựa trên câu trả lời của @ Rinzwind và được truyền cảm hứng từ một mô tả đơn vị, điều tốt nhất tôi có thể tìm thấy là sử dụng TaaS (Tmux như một Dịch vụ) - một ví dụ chung tách rời của tmuxmột reattaches.

# 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)#

Điều này là gọn gàng nhưng tôi không thể tìm ra lý do tại sao bạn sử dụng nó! :)
đăng

5
@sarnold: để có thể kiểm soát các ứng dụng khởi động bằng bàn điều khiển, nhưng giả sử là đang chạy khi khởi động. Minecraft là một ví dụ.
WoJ

5

RemainAfterExit =

Có một giá trị boolean xác định xem dịch vụ có được coi là hoạt động ngay cả khi tất cả các quy trình của nó đã thoát hay không. Mặc định là không.


Cảm ơn. Tôi đã chấp nhận và +1 câu trả lời của bạn vì nó cung cấp cốt lõi của giải pháp. Bạn có biết nếu nó có thể sử dụng được trong chế độ tương tác (bằng cách khởi chạy tmuxtương tác, trái ngược với câu trả lời của tôi)?
WoJ

nghi ngờ điều đó. systemd có lẽ sẽ không quan tâm đến tmux của bạn trừ khi bạn nói với systemd rằng nó nên :-P (cách tiếp cận của họ với điều này khá đơn độc .... có vẻ như đó là cách của họ hoặc không có cách nào.) Bạn cần một mô tả đơn vị như bạn đăng. Vui lòng chấp nhận của bạn và / hoặc mở rộng của bạn ;-) Tôi không cần người đại diện>: - D
Rinzwind

3
Câu trả lời này cần nhiều chi tiết hơn như sử dụng cài đặt đó ở đâu.
kasperd

1
Chắc chắn nhưng câu trả lời sẽ là một bản sao / dán của trang hướng dẫn ;-)
Rinzwind

1
@WoJ Bạn có thể tạo một bí danh tmuxđể bắt đầu là systemd-run --remain-after-exit tmux(hoặc thậm chí có thể có --scope --usercờ).
Debilski

2

Bạn cần đặt Typedịch vụ thành forking, như được giải thích ở đây .

Giả sử dịch vụ bạn muốn chạy screenđược gọi minecraft. Sau đó, bạn sẽ mở minecraft.servicetrong một trình soạn thảo văn bản và thêm hoặc chỉnh sửa mục Type=forkingdưới phần [Service].


0

Theo /unix//a/287282/117599 gọi tmuxbằng cách sử dụng

systemd-run --user --scope tmux

cũng nên làm thủ thuật.


Thật không may, điều này dường như không còn hoạt động trong vũ trụ 18.10.
taneli
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.