Запустить tmux и выполнить набор команд при загрузке

Если вы запускаете эти rsync команды на удаленном компьютере, вы говорите ему подключиться к самому себе через ssh и скопировать файл.

Если вы запустите их на Mac, вы укажете Mac подключиться к удаленному компьютеру и скопировать файл себе. Я полагаю, это то, что вы хотите сделать.

Есть два основных решения:

  1. просто запустите команды на самом Mac. Как они написаны, они просто будут правильно работать в этом контексте.

  2. Если вы можете вернуться на свой Mac по ssh с компьютера Uni, вы можете переписать команды так, чтобы он копировал локальные файлы (локальные для удаленного компьютера, то есть) на Mac. С точки зрения удаленного компьютера ваш Mac - это удаленный компьютер. Например:

    rsync ~ / hw0 / hello.cpp anthony @ mac-host-or-ip: / Users / anthony /

Обратите внимание, что если ваш Mac находится за брандмауэром, шлюзом NAT или аналогичным, он может быть трудно снова подключиться к вашему Mac ... но решение этой проблемы - совершенно другая проблема, требующая отдельного вопроса.

1
13.05.2018, 18:51
4 ответа

В системе, где cron @rebootзапускается слишком рано в последовательности загрузки, я запускаю сценарий оболочки по шаблону

#!/bin/bash
source ~/.bash_profile
if tmux has-session -t auto-session > /dev/null 2>&1; then
    :
else
    tmux new-session -d -s auto-session -n foo bar
    tmux new-window -d -t auto-session
fi

регулярно каждые несколько минут через crontab

*/2 * * * * $HOME/path/to/start-user-auto-session.bash
0
28.01.2020, 00:35

В моем случае у меня есть учетная запись пользователя только для запуска одного скрипта, поэтому я предоставляю конфигурацию tmux по умолчанию в домашнем каталоге этого пользователя, создавая файл ~/.tmux.conf

Мой ~файл /.tmux.conf выглядит (примерно )так:

new-session -d -s MYSESSIONNAME
set -g status off
new-window ~/my-startup-script.sh

мой -запуск -script.sh должен иметь набор разрешений +x, очевидно.

Чтобы запустить скрипт ~/.tmux.conf tmux, введите команду

tmux start-server
3
28.01.2020, 00:35

Я пробовал ответы, опубликованные до меня, но они мне непонятны. Поэтому я решил найти более простое решение с меньшим количеством параметров.

Я нашел в Интернете шпаргалку. Вот хороший пример

Некоторые команды, которые я использую ежедневно::

  • создать новый сеанс TMUXtmux new -s SESSIONNAME
  • для просмотра сеансаtmux ls
  • для подключения существующего сеанса к терминалуtmux a -t SESSIONNAME
  • закрыть сеансtmux kill-session -t SESSIONNAME
  • отправить ключ в существующую сессиюtmux send-keys -t SESSIONNAME "cd /pathname/"

Вот пример того, как можно взаимодействовать с существующим сеансом.

# create two new sessions SES1 and SES2 and detach them.(-d -s is important)
tmux new-session -d -s SES1
tmux new-session -d -s SES2

# let us send some commands to the other session (Python for example)
tmux send-keys -t SES1 "ipython3" C-m
tmux send-keys -t SES1 "from numpy import zeros" C-m
tmux send-keys -t SES1 "a = zeros((10,10))" C-m

Теперь, если вы откроете SES1 в новом окне терминала, вы увидите запущенный ipython и две выполненные команды.

$ ipython3
Python 3.8.5 (default, Jul 28 2020, 12:59:40) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.13.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from numpy import zeros                 

In [2]: a = zeros((10,10))                      

In [3]:  

Метод 1:Это мой любимый метод, и я активно им пользуюсь.

создать файлnano ~/.tmux.conf

содержимое файла

#TMUX start-up script
new-session -d -s SES3
set -g status off #NOTE: this will disable the status bar(green text in the bottom. Personally, I like it there.

send-keys -t SES3 "ipython3" C-m
send-keys -t SES3 "from numpy import zeros" C-m
send-keys -t SES3 "a = zeros((10,10))" C-m

Метод 2:Следующим шагом будет создание сценария и запуск его при запуске -. См. это например

создать файл tmux_startupв /etc/init.d/.

sudo nano /etc/init.d/tmux_startup

пример файла

#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here.... tmux script runs on startup.

tmux new-session -d -s SES1
tmux new-session -d -s SES2

tmux send-keys -t SES1 "ipython3" C-m
tmux send-keys -t SES1 "from numpy import zeros" C-m
tmux send-keys -t SES1 "a = zeros((10,10))" C-m

При загрузке системы вы должны увидеть созданные сеансы.

$ tmux ls
0
26.01.2021, 11:10

Этот пост был чрезвычайно ценным! Мы взяли некоторые решения и объединили их в простую в использовании функцию bash, которую можно использовать повторно :

.
# Parameters: session_name working_directory command_to_run
ensure_tmux_session() {
    # echo $1 $2 $3
    # https://unix.stackexchange.com/questions/443569/start-tmux-and-execute-a-set-of-commands-on-boot
    if tmux has-session -t $1 > /dev/null 2>&1; then
        :
    else
        tmux new-session -d -s $1 
        tmux send-keys -t $1 "cd $2" C-m
        tmux send-keys -t $1 "$3" C-m
    fi
}

Пример использования:

ensure_tmux_session session_name "~/my_dir" "./my_script param1 param2"
0
27.10.2021, 11:30

Теги

Похожие вопросы