انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => انجمن عمومی => نویسنده: عرفان خیراللهی در 28 آبان 1400، 02:57 ق‌ظ

عنوان: اجرای خودکار تی‌ماکس موقع روشن شدن در لینوکس سرور (حل شد)
ارسال شده توسط: عرفان خیراللهی در 28 آبان 1400، 02:57 ق‌ظ
سلام دوستان!
من یک سرور اوبونتو دارم و از tmux برای اجرای برنامه‌ها روش استفاده می‌کنم. حالا می‌خوام این کار رو خودکار کنم.
یک اسکریپت برای این نوشتم که وقتی در یک ترمینال اجرایش می‌کنی، یک tmux در همون ترمینال اجرا می‌کنه به همراه کارهای دیگری که بهش گفته‌ام.
حالا می‌خوام اجرا کردن این اسکریپت رو اتوماتیک کنم که وقتی سرور روشن می‌شه خود به خود اون رو اجرا کنه!
من آدرس اسکریپت رو در crontab گذاشتم. اسکریپت یه ذره طولانی‌تره ولی اصلش چیزیه مثل این:
tmux new-session -t mysession
ولی موقع اجرا شدن این خطا رو دریافت می‌کنم:
open terminal failed: not a terminal

گویا برای اجرا شدن این لازمه که یک ترمینال از قبل باز باشه یا یه همچین چیزی!
می‌تونید من رو راهنمایی کنید که چطوری می‌تونم باز شدن یک tmux session رو خودکار کنم؟
عنوان: پاسخ : اجرای خودکار تی‌ماکس موقع روشن شدن در لینوکس سرور
ارسال شده توسط: مرتضی . م در 28 آبان 1400، 05:18 ق‌ظ
سلام دوستان!
من یک سرور اوبونتو دارم و از tmux برای اجرای برنامه‌ها روش استفاده می‌کنم. حالا می‌خوام این کار رو خودکار کنم.
یک اسکریپت برای این نوشتم که وقتی در یک ترمینال اجرایش می‌کنی، یک tmux در همون ترمینال اجرا می‌کنه به همراه کارهای دیگری که بهش گفته‌ام.
حالا می‌خوام اجرا کردن این اسکریپت رو اتوماتیک کنم که وقتی سرور روشن می‌شه خود به خود اون رو اجرا کنه!
من آدرس اسکریپت رو در crontab گذاشتم. اسکریپت یه ذره طولانی‌تره ولی اصلش چیزیه مثل این:
tmux new-session -t mysession
ولی موقع اجرا شدن این خطا رو دریافت می‌کنم:
open terminal failed: not a terminal

گویا برای اجرا شدن این لازمه که یک ترمینال از قبل باز باشه یا یه همچین چیزی!
می‌تونید من رو راهنمایی کنید که چطوری می‌تونم باز شدن یک tmux session رو خودکار کنم؟
به انتهای فایل zshrc یا bashrc کلمه (دستور) tmux رو اضافه کن (نگران این نباش که هی tmux تو tmux بیاد چون خود tmux به طور پیشفرض به طور nested اجرا نمیشه
عنوان: پاسخ : اجرای خودکار تی‌ماکس موقع روشن شدن در لینوکس سرور
ارسال شده توسط: esmaeelE در 28 آبان 1400، 07:26 ق‌ظ
دستور اتصال به tmux در صورت موجود بودن یا ساخت یک خدمت دهنده جدید را به bashrc. بیفزایید.

https://stackoverflow.com/a/40192494/7508077

عنوان: پاسخ : اجرای خودکار تی‌ماکس موقع روشن شدن در لینوکس سرور
ارسال شده توسط: عرفان خیراللهی در 28 آبان 1400، 12:36 ب‌ظ
فکر کنم بد توضیح دادم (:
می‌خوام وقتی سیستم روشن می‌شه، بدون این که من بهش ssh بزنم، یک پنجره tmux باز بشه و بعدش برنامه‌های من توش شروع به کار کنه.

درواقع می‌خوام سیستم هر روز یک بار ری‌استارت بشه و بعدش پنجره tmux باز بشه و برنامه‌ها توش اجرا بشن. ولی نمی‌خوام دستی لاگین کنم به سیستم!

سپاس از دوستان
عنوان: پاسخ : اجرای خودکار تی‌ماکس موقع روشن شدن در لینوکس سرور
ارسال شده توسط: Dragon- در 29 آبان 1400، 09:16 ق‌ظ
حتما tmux باید باز بشه؟ دلیل اینکه می‌خواهید از tmux استفاده بشه این هست که دستورات/اسکریپت‌ها رو همزمان اجرا کنید؟
عنوان: پاسخ : اجرای خودکار تی‌ماکس موقع روشن شدن در لینوکس سرور
ارسال شده توسط: عرفان خیراللهی در 29 آبان 1400، 12:29 ب‌ظ
بله. من اسکریپت‌ها رو روی tmux اجرا می‌کنم و گاهی بهشون سر می‌زنم و بررسی‌شون می‌کنم.
اگر بدون اون باشه، نمی‌تونم به راحتی خروجی چند تا دستور در حال اجرا رو هم‌زمان ببینم. ولی tmux خیلی کار رو آسون‌تر می‌کنه.
مشکل فقط اینه که بعد از روشن شدن سرور، باید یه بار لاگین کنم و دستی یه اسکریپت رو اجرا کنم. در حالی که ترجیح می‌دم این به شکل خودکار انجام بشه. در زودترین زمان ممکن بعد از روشن‌شدن. ضمن این که الان ریبوت کردن سرور رو هم نتونسته‌ام خودکارش کنم به خاطر همین مساله و مجبورم خودم دستی این کار رو انجام بدم و بعدش صبر کنم تا کامل روشن بشه تا بتونم بهش ssh بزنم و tmux رو اجرا کنم.
همون‌طور که گفتم تنها کاری که لازمه انجام بشه اجرای یک خط دستوره. منتها اون خطایی که گفتم رو می‌گیرم.
عنوان: پاسخ : اجرای خودکار تی‌ماکس موقع روشن شدن در لینوکس سرور
ارسال شده توسط: esmaeelE در 29 آبان 1400، 01:20 ب‌ظ
یک راه ساده اینه که یک اسکریپت برای اجرای tmux بسازید.

برای نمونه tmux.sh

set -e

if [ $# -lt 2 ]
then
  echo "Usage: $0 [session_name] [command_1]..."
  exit 1
fi

session=$1
shift

tmux start-server
tmux new -d -s $session

on_error() {
  tmux kill-session -t $session
}
trap on_error ERR

cmd1=$1
shift
tmux send -t $session:0 "$cmd1" C-m

for i in "$@"
do
  tmux splitw -t $session -l 1
  tmux send -t $session:0.1 "$i" C-m
  tmux selectp -t $session:0.0
  tmux selectl -t $session tiled
done

tmux a -t $session


برای اجرای چند فرمان به این شکل فراخوانی کنید.
bash tmux.sh session_name "echo salam1" ls
آرگومان دوم و سوم فرمان هستند.

https://unix.stackexchange.com/a/500620/235261


برای اجرا در زمان راه اندازی هم یک راه crontab است.

@reboot  /home/user/tmux.sh
https://stackoverflow.com/a/29247942/7508077

عنوان: پاسخ : اجرای خودکار تی‌ماکس موقع روشن شدن در لینوکس سرور
ارسال شده توسط: عرفان خیراللهی در 29 آبان 1400، 04:43 ب‌ظ
ممنونم :) درست شد!
در واقع این دو خط که گفتید رو در اسکریپت تغییر دادم و برطرف شد:
tmux start-server
tmux new -d -s $session

اون سوییج d- درستش کرد!