Рейтинг:0

Как создать сценарий sh для запуска другого сценария sh с сеансом Screen или сеансом Tmux

флаг co

Все, что я хочу, это создать скрипт bash, который запускает другой скрипт bash в другой папке, но с сеансом отдельного экрана. Также он должен выполняться как пользователь без полномочий root. Вот что я сделал:

#!/бин/ш
cd /bot/ && screen -S Bot -d -m ./bot.sh
chmod +x script.sh

После запуска с ./script.sh, это не дает мне ошибку, но не отвечает.

Также я пробовал с:

#!/бин/ш
screen -S Bot -d -m -c "cd bot" && ./bot.sh

И придумать эту ошибку: ./script.sh: строка 1: bot.sh: нет такого файла или каталога

У меня тоже есть небольшой вопрос: как я могу сделать скрипт для отслеживания этого сеанса, чтобы запустить его, если сеанс или бот завершаются? Заранее спасибо.

vanadium avatar
флаг cn
Зачем вам/нужно это? Расскажите нам, чего вы действительно хотите, и мы, возможно, сможем предложить гораздо лучшее решение, чем то, что вы в настоящее время считаете решением вашей проблемы.
флаг co
Привет, я думаю, что проблема решена с помощью скрипта Tmux. И ты прав, я должен был четко сказать, чего я хочу. Я хочу, чтобы этот скрипт работал при запуске с пользователем без полномочий root, но также имел возможность перезапускать сеанс или сам бот завершал работу.
Рейтинг:1
флаг vn

Этот сценарий основан на ряде предположений:

  1. Я использую tmux вместо экрана

  2. Сценарий, который вы хотите запустить внутри tmux, /bot/bot.sh

Итак ./script.sh Я бы предложил следующее:

#!/бин/ш
sessname="Бот"

# Создать новую сессию с именем "$sessname"
tmux новая сессия -d -s "$sessname"

# Выполнить команду в сеансе "$sessname"
tmux send-keys -t "$sessname" "/bot/bot.sh" Enter

# Присоединиться к сеансу "$sessname"
#tmux attach -t "$sessname"

Пара замечаний:

  1. Вы всегда должны использовать абсолютные пути в скрипте (/bot/bot.sh, нет ./бот.ш)
  2. Если вы также хотите подключиться к сеансу, раскомментируйте последнюю строку
флаг co
Большое спасибо за ваш интерес. Не могли бы вы помочь с запуском этого скрипта при запуске с пользователем без полномочий root и найти способ следить за его перезапуском, когда он завершается?
Рейтинг:0
флаг in

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

Проверять экран -ls видеть бег экран сессии и экран -r идентификатор к ним пристроиться.

В любом случае, вам лучше использовать абсолютные пути: /bot/bot.sh вместо cd /bot/ && ./bot.sh:

#!/бин/ш
экран -S Бот -d -m /bot/bot.sh

Вы должны быть в состоянии прикрепить к экран с экран -r Бот.


Ваш второй сценарий совершенно неверен:

screen -S Bot -d -m -c "cd bot" && ./bot.sh
  • ожидает файл:

    -c файл заменить файл конфигурации по умолчанию с "$HOME/.screenrc" на файл.

  • Он работает ./бот.ш вне сеанса, потому что && разделит ваши команды. Итак, вы все еще находитесь в исходном каталоге, где бот.ш не существует. Отсюда ошибка.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.