Я хочу использовать один сценарий для запуска 2 сеансов, сеанса демона и сеанса пользователя. Я хочу, чтобы скрипт запускался при загрузке без входа пользователей.
Сценарий, который я создал, работает при запуске напрямую, но только частично при запуске с systemctl, запускает daemon.service от имени пользователя root (также при загрузке).
По сути, скрипт делает это:
# 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
Это оно. Просто. Нет вложенных сессий, тем не менее предупреждает tmux. Зачем? В другом месте я читал, что установка TERM и сброс TMV env vars необходимы для процесса systemd, поскольку tmux для tmux не используется. Похоже, это помогло, хотя я прошел через так много испытаний, не мог дать вам никаких подробностей.
Симптомом является начало обоих сеансов, демон выглядит нормально, но панели пользовательских сеансов пусты, но все панели созданы правильно. Клавиши отправки, похоже, не отправляются им, хотя журнал выглядит отлично, нигде ничего не висит.
Мне это нужно для работы на разных версиях tmux от 1.9 до 2.1 (Ubuntu 16.04 и Debian 8.7 и 8.8). Пользовательская часть запускает "менее" пейджер для просмотра журнала демона и 2 процесса, которые могут взаимодействовать с пользователем. Я поместил «tmux attach-session -t user» в свой .profile, чтобы при входе в систему я видел все окна и мог взаимодействовать с ними. Важно, чтобы пользовательские процессы также запускались с демоном, даже если ни один пользователь не присутствует.
Я не понимаю, почему tmux, кажется, думает, что сессии являются вложенными, просто b/c 2 запускаются из того же сценария. Когда скрипт завершает работу, что-то не так, и systemd затем снова вызывает скрипт, чтобы перезапустить все. Для тестирования у меня есть # Restart = on-fail закомментировано.
Я вижу, что клавиши send выполняются, глядя на ps, они все работают. Я думаю, что переменные TMUX & TERM являются ключом к проблеме, но я не уверен, как ее решить, так что A) tmux разделяет сессии и B) нет проблем при запуске без пользователей или с открытым терминалом ttys.