Если вы запускаете эти rsync
команды на удаленном компьютере, вы говорите ему подключиться к самому себе через ssh и скопировать файл.
Если вы запустите их на Mac, вы укажете Mac подключиться к удаленному компьютеру и скопировать файл себе. Я полагаю, это то, что вы хотите сделать.
Есть два основных решения:
просто запустите команды на самом Mac. Как они написаны, они просто будут правильно работать в этом контексте.
Если вы можете вернуться на свой Mac по ssh с компьютера Uni, вы можете переписать команды так, чтобы он копировал локальные файлы (локальные для удаленного компьютера, то есть) на Mac. С точки зрения удаленного компьютера ваш Mac - это удаленный компьютер. Например:
rsync ~ / hw0 / hello.cpp anthony @ mac-host-or-ip: / Users / anthony /
Обратите внимание, что если ваш Mac находится за брандмауэром, шлюзом NAT или аналогичным, он может быть трудно снова подключиться к вашему Mac ... но решение этой проблемы - совершенно другая проблема, требующая отдельного вопроса.
В системе, где 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
В моем случае у меня есть учетная запись пользователя только для запуска одного скрипта, поэтому я предоставляю конфигурацию 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
Я пробовал ответы, опубликованные до меня, но они мне непонятны. Поэтому я решил найти более простое решение с меньшим количеством параметров.
Я нашел в Интернете шпаргалку. Вот хороший пример
Некоторые команды, которые я использую ежедневно::
tmux 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
Этот пост был чрезвычайно ценным! Мы взяли некоторые решения и объединили их в простую в использовании функцию 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"