Puncte:0

Cum se creează un script sh pentru a rula un alt script sh cu sesiune Screen sau sesiune Tmux

drapel co

Tot ce vreau este să creez un script bash care rulează un alt script bash într-un folder diferit, dar cu o sesiune de ecran detașată. De asemenea, ar trebui să fie executat ca utilizator non-root. Iată ce am făcut:

#!/bin/sh
cd /bot/ && ecran -S Bot -d -m ./bot.sh
chmod +x script.sh

După ce-l rulează cu ./script.sh, nu îmi dă o eroare, dar nici un răspuns.

Am incercat si cu:

#!/bin/sh
ecran -S Bot -d -m -c "cd bot" && ./bot.sh

Și veniți cu această eroare: ./script.sh: linia 1: bot.sh: Nu există un astfel de fișier sau director

Am și eu o mică întrebare: cum pot face un script pentru a urmări această sesiune pentru a o rula înapoi dacă sesiunea sau botul se termină? Mulțumesc anticipat.

vanadium avatar
drapel cn
De ce ai vrea/ai avea nevoie de asta? Spune-ne ce vrei cu adevărat și s-ar putea să găsim o soluție mult mai bună decât ceea ce crezi că este soluția la problema ta.
Alobar avatar
drapel co
Bună, cred că problema s-a rezolvat cu scriptul Tmux. Și ai dreptate, ar fi trebuit să spun clar ce vreau. Vreau ca acest script să funcționeze la pornire cu un utilizator non-root, dar să aibă și capacitatea de a reporni la sesiune sau botul în sine se termină.
Puncte:1
drapel vn

Acest script se bazează pe o serie de presupuneri:

  1. Folosesc tmux în loc de ecran

  2. Scriptul pe care doriți să-l rulați în interiorul tmux este /bot/bot.sh

Asa ca ./script.sh Aș sugera că este următorul:

#!/bin/sh
sessname="Bot"

# Creați o nouă sesiune numită „$sessname”
tmux new-session -d -s „$sessname”

# Rulați comanda în sesiunea „$sessname”
tmux send-keys -t „$sessname” „/bot/bot.sh” Enter

# Atașați la sesiune „$sessname”
#tmux atașați -t „$sessname”

Câteva observații:

  1. Ar trebui să utilizați întotdeauna căi absolute într-un script (/bot/bot.sh, nu ./bot.sh)
  2. Dacă doriți să atașați și la sesiune, decomentați ultima linie
Alobar avatar
drapel co
Mulțumesc mult pentru interes. Ați putea ajuta la realizarea acestui script să ruleze la pornire cu un utilizator non-root și să găsiți o modalitate de a-l urmări pentru a reporni când se încheie?
Puncte:0
drapel in

Cred că prima ta opțiune funcționează bine, dar ecran va rula în modul detașat, așa că nu veți vedea nicio ieșire în exterior ecran.

Verifica ecran -ls să văd alergând ecran sesiuni și ecran -r ID să se atașeze de ele.

Oricum, ai putea folosi mai bine căile absolute: /bot/bot.sh în loc de cd /bot/ && ./bot.sh:

#!/bin/sh
ecran -S Bot -d -m /bot/bot.sh

Ar trebui să vă puteți atașa la ecran cu ecran -r Bot.


Al doilea script al tău este destul de greșit:

ecran -S Bot -d -m -c "cd bot" && ./bot.sh
  • -c ma asteptam la un fisier:

    -c fișier înlocuiți fișierul de configurare implicit din „$HOME/.screenrc” în fișier.

  • Se rulează ./bot.sh în afara sesiunii pentru că && va separa comenzile dvs. Deci, ești încă în directorul tău inițial unde bot.sh nu exista. De aici eroarea.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.