2 seans, bir daemon seansı ve bir kullanıcı seansı başlatmak için tek bir komut dosyası kullanmak istiyorum. Herhangi bir kullanıcı oturum açmadan komut dosyasının açılışta başlamasını istiyorum.
Oluşturduğum komut dosyası doğrudan başlatıldığında çalışır, ancak yalnızca kısmen root olarak systemctl start daemon.service (boot'da olduğu gibi) ile başlatıldığında çalışır.
Esasen script bunu yapar:
# Clean up any old tmux sessions
tmux kill-session -t daemon > /dev/null 2>&1
tmux kill-session -t user > /dev/null 2>&1
rm -rf /tmp/tmux-`id -u`
tmux new-session -d -s daemon
tmux send-keys "$DAEMON" C-m
# Start the main tmux session from which we'll create
# all window panes
export TMUX=
export TERM=xterm
tmux new-session -d -s user
tmux list-sessions >> $LOG
# Various window setup using "tmux split-window -h"
# or "tmux split-window -v" - no other args
# Window panes created. Now wait for daemon process to open socket, then
echo "Daemon is now listening." >> $LOG
tmux send-keys -t 1 "$CMD1" C-m
echo "Sent $CMD1 to pane 1" >> $LOG
tmux send-keys -t 1 "$CMD2" C-m
echo "Sent $CMD2 to pane 2" >> $LOG
...
# Spin in a loop until the daemon process stops listening, then exit
Bu kadar. Basit. İç içe geçmiş oturumlar yok, ancak tmux uyardı. Niye ya? TERM’i ayarlamak ve TMUX env değişkenlerini ayarlamaktan başka bir şey okudum, çünkü tmux’un kullanabileceği bir sistem olmadığından bir sistem süreci için gerekli. Yardımcı oldum, o yüzden çok fazla deneme yaptım size hiçbir ayrıntı veremedi.
Belirti her iki oturumun başlaması, arka plan programı normal görünüyor, ancak kullanıcı oturum bölmeleri boş, ancak tüm bölmeler doğru oluşturuldu. Gönderme tuşları kendilerine gönderilmemiş gibi görünüyor, günlük mükemmel görünüyor, hiçbir yere takılmıyor.
Bunun için tmux'un 1.9 ile 2.1 arasında değişen farklı sürümlerinde çalışması gerekiyor (ubuntu 16.04 ve Debian 8.7 & 8.8). Kullanıcı kısmı, daemon günlüğünü görüntülemek için "daha az" bir çağrı cihazı başlatır ve bir kullanıcı ile etkileşime girebilen 2 işlem yapar. .Profile dosyama bir "tmux attach-session -t kullanıcısı" koydum, böylece giriş yaptığımda tüm pencereleri görebiliyorum ve onlarla etkileşime geçebiliyorum. Hiçbir kullanıcının mevcut olmasa bile, kullanıcının işlemlerinin daemon ile başlaması önemlidir.
Neden tmux’un oturumların iç içe olduğunu düşündüğünü anlamıyorum, sadece b / c 2 de aynı komut dosyasından başlıyor. Betik bir şey çıktığında ve systemd her şeyi yeniden başlatmak için betiği tekrar arayacaktır. Sınama için # Restart = on-fail yorumlanmamıştır.
Gönderme tuşlarının ps'ye bakılarak çalıştırıldığını görebiliyorum, hepsi çalışıyor. Bence TMUX & TERM env vars, problemin anahtarını oluşturuyor, ancak bunun nasıl çözüleceğinden emin değilim, bu yüzden A) tmux, oturumları ayırır ve B) hiçbir kullanıcı ile başlamadan veya açık terminal tty'lerinden başlamaz.