چرا کانتینر پس از توقف دستی ریاستارت نمیشود؟
سیاست always به این شکل کار میکند:
اگر کانتینر بهصورت غیرمنتظره متوقف شود (مثلاً بهخاطر خطا یا خاموش شدن سیستم)، Docker آن را مجدداً استارت میکند.
اما اگر شما بهصورت دستی و از طریق دستور docker stop یا docker kill کانتینر را متوقف کنید، Docker کانتینر را مجدداً استارت نمیکند، زیرا فرض میکند که شما بهطور عمدی آن را متوقف کردهاید.
سیاست always به این شکل کار میکند:
اگر کانتینر بهصورت غیرمنتظره متوقف شود (مثلاً بهخاطر خطا یا خاموش شدن سیستم)، Docker آن را مجدداً استارت میکند.
اما اگر شما بهصورت دستی و از طریق دستور docker stop یا docker kill کانتینر را متوقف کنید، Docker کانتینر را مجدداً استارت نمیکند، زیرا فرض میکند که شما بهطور عمدی آن را متوقف کردهاید.
اگر قصد دارید کانتینر بعد از هر توقف، حتی توقف دستی، بهطور خودکار استارت شود، باید از یک اسکریپت خارجی یا ابزار مانیتورینگ استفاده کنید که دائماً وضعیت کانتینر را بررسی کرده و در صورت توقف، آن را مجدداً استارت کند. اما بهطور پیشفرض، Docker سیاست ریاستارت always را برای متوقف کردن دستی اعمال نمیکند.
برای اینکه یک راهحل ساده داشته باشی که کانتینر بعد از توقف دستی هم دوباره بهطور خودکار استارت شود، میتوانی یک اسکریپت شِل کوچک بنویسی که وضعیت کانتینر را بررسی کند و اگر متوقف شده بود، دوباره آن را استارت کند.
اسکریپت ساده:
#!/bin/bash
CONTAINER_NAME="<container_name_or_id>"
while true; do
STATUS=$(docker inspect -f '{{.State.Status}}' $CONTAINER_NAME)
if [ "$STATUS" != "running" ]; then
echo "Container $CONTAINER_NAME is not running. Starting it now..."
docker start $CONTAINER_NAME
fi
sleep 10 # بررسی وضعیت هر ۱۰ ثانیه یکبار
done
توضیحات:
اسکریپت هر ۱۰ ثانیه وضعیت کانتینر را بررسی میکند.
اگر کانتینر در وضعیت running نباشد، دستور docker start اجرا شده و کانتینر استارت میشود.
متغیر CONTAINER_NAME را به نام یا ID کانتینر موردنظر تغییر بده.
نحوه اجرای اسکریپت:
اسکریپت را در یک فایل ذخیره کن. مثلاً به نام container-watch.sh.
به فایل دسترسی اجرایی بده:
chmod +x container-watch.sh
اسکریپت را اجرا کن:
./container-watch.sh
این اسکریپت کانتینر را بهطور مداوم مانیتور میکند و اگر متوقف شد (حتی بهصورت دستی)، آن را مجدداً استارت میکند.
اسکریپت ساده:
#!/bin/bash
CONTAINER_NAME="<container_name_or_id>"
while true; do
STATUS=$(docker inspect -f '{{.State.Status}}' $CONTAINER_NAME)
if [ "$STATUS" != "running" ]; then
echo "Container $CONTAINER_NAME is not running. Starting it now..."
docker start $CONTAINER_NAME
fi
sleep 10 # بررسی وضعیت هر ۱۰ ثانیه یکبار
done
توضیحات:
اسکریپت هر ۱۰ ثانیه وضعیت کانتینر را بررسی میکند.
اگر کانتینر در وضعیت running نباشد، دستور docker start اجرا شده و کانتینر استارت میشود.
متغیر CONTAINER_NAME را به نام یا ID کانتینر موردنظر تغییر بده.
نحوه اجرای اسکریپت:
اسکریپت را در یک فایل ذخیره کن. مثلاً به نام container-watch.sh.
به فایل دسترسی اجرایی بده:
chmod +x container-watch.sh
اسکریپت را اجرا کن:
./container-watch.sh
این اسکریپت کانتینر را بهطور مداوم مانیتور میکند و اگر متوقف شد (حتی بهصورت دستی)، آن را مجدداً استارت میکند.
برای اینکه این اسکریپت به عنوان یک سرویس سیستمعامل (systemd service) همیشه در بکگراند اجرا شود، میتوانید آن را بهصورت یک سرویس systemd تنظیم کنید. این روش به شما اجازه میدهد که اسکریپت بهصورت خودکار با بوت شدن سیستم شروع شود و در صورت نیاز بهسادگی مدیریت شود.
مراحل ایجاد سرویس systemd:
1. ایجاد فایل سرویس:
ابتدا فایل اسکریپت را در یک دایرکتوری مناسب مثل /usr/local/bin کپی کنید. مثلاً:
sudo cp container-watch.sh /usr/local/bin/
سپس یک فایل سرویس جدید در دایرکتوری systemd ایجاد کنید:
sudo nano /etc/systemd/system/container-watch.service
2. محتوای فایل سرویس:
فایل سرویس را بهصورت زیر تنظیم کنید:
[Unit]
Denoscription=Container Watch Service
After=docker.service
Requires=docker.service
[Service]
ExecStart=/usr/local/bin/container-watch.sh
Restart=always
User=root
[Install]
WantedBy=multi-user.target
توضیحات:
ExecStart: مسیر کامل اسکریپت شما.
Restart=always: به سرویس میگوید اگر اسکریپت متوقف شد، آن را دوباره اجرا کند.
User=root: اسکریپت به عنوان کاربر root اجرا میشود. (در صورت نیاز میتوانید کاربر دیگری را انتخاب کنید)
After=docker.service و Requires=docker.service: این خطوط تضمین میکنند که سرویس بعد از اجرای Docker شروع میشود.
3. ریلود و فعالسازی سرویس:
بعد از ایجاد فایل سرویس، systemd را ریلود کنید تا تغییرات اعمال شوند:
sudo systemctl daemon-reload
4. بررسی وضعیت سرویس:
برای مشاهده وضعیت سرویس میتوانید از دستور زیر استفاده کنید:
sudo systemctl status container-watch.service
مراحل ایجاد سرویس systemd:
1. ایجاد فایل سرویس:
ابتدا فایل اسکریپت را در یک دایرکتوری مناسب مثل /usr/local/bin کپی کنید. مثلاً:
sudo cp container-watch.sh /usr/local/bin/
سپس یک فایل سرویس جدید در دایرکتوری systemd ایجاد کنید:
sudo nano /etc/systemd/system/container-watch.service
2. محتوای فایل سرویس:
فایل سرویس را بهصورت زیر تنظیم کنید:
[Unit]
Denoscription=Container Watch Service
After=docker.service
Requires=docker.service
[Service]
ExecStart=/usr/local/bin/container-watch.sh
Restart=always
User=root
[Install]
WantedBy=multi-user.target
توضیحات:
ExecStart: مسیر کامل اسکریپت شما.
Restart=always: به سرویس میگوید اگر اسکریپت متوقف شد، آن را دوباره اجرا کند.
User=root: اسکریپت به عنوان کاربر root اجرا میشود. (در صورت نیاز میتوانید کاربر دیگری را انتخاب کنید)
After=docker.service و Requires=docker.service: این خطوط تضمین میکنند که سرویس بعد از اجرای Docker شروع میشود.
3. ریلود و فعالسازی سرویس:
بعد از ایجاد فایل سرویس، systemd را ریلود کنید تا تغییرات اعمال شوند:
sudo systemctl daemon-reload
4. بررسی وضعیت سرویس:
برای مشاهده وضعیت سرویس میتوانید از دستور زیر استفاده کنید:
sudo systemctl status container-watch.service
Forwarded from Milad Mahmoodian
https://gparted.org/download.php
GParted is a free partition manager that enables you to resize, copy, and move partitions without data loss.
gparted.org
GParted -- Download
Forwarded from Milad Mahmoodian
sudo apt update
sudo apt upgrade
sudo apt install software-properties-common apt-transport-https wget
sudo apt upgrade
sudo apt install software-properties-common apt-transport-https wget
Forwarded from Milad Mahmoodian
wget -q http://www.webmin.com/jcameron-key.asc -O- | sudo apt-key add -
Forwarded from Milad Mahmoodian
echo "deb http://download.webmin.com/download/repository sarge contrib" | sudo tee /etc/apt/sources.list.d/webmin.list
Forwarded from Milad Mahmoodian
:local logTime [/system clock get time];
:local logDate [/system clock get date];
:local interfaceName Dubai;
:local event UP;
:local logFileName "interface-logs.txt";
:local logMessage ("$logDate $logTime - Interface: $interfaceName - Event: $event");
:local fileCount [:len [/file find name="$logFileName"]];
:if ($fileCount = 0) do={/file print file="$logFileName"};
/file set "$logFileName" contents=([/file get "$logFileName" contents] . "\n$logMessage");
:local logDate [/system clock get date];
:local interfaceName Dubai;
:local event UP;
:local logFileName "interface-logs.txt";
:local logMessage ("$logDate $logTime - Interface: $interfaceName - Event: $event");
:local fileCount [:len [/file find name="$logFileName"]];
:if ($fileCount = 0) do={/file print file="$logFileName"};
/file set "$logFileName" contents=([/file get "$logFileName" contents] . "\n$logMessage");
Forwarded from Milad Mahmoodian
برای خروجی لاگ قطعی و وصلی اینترفیس ها
د ر ادامه :
/tool netwatch
add host=8.8.8.8 interval=1m up-noscript="/system noscript run LogInterfaceEvent ether1 up" down-noscript="/system noscript run LogInterfaceEvent ether1 down"
میاد توی netwatch که بگه اگر قطعی بود چه کن و اگر وصل بود چه کن
د ر ادامه :
/tool netwatch
add host=8.8.8.8 interval=1m up-noscript="/system noscript run LogInterfaceEvent ether1 up" down-noscript="/system noscript run LogInterfaceEvent ether1 down"
میاد توی netwatch که بگه اگر قطعی بود چه کن و اگر وصل بود چه کن
Forwarded from Milad Mahmoodian
YouTube
Explaining the Difference Between SSD NVMe and M2 SATA and mSATA
What is NVMe M2 SSD and M.2 SATA or mSATA - what is the difference when choosing an SSD. We show the difference between the SATA bus from PCI-E, and also help with the choice of adapter for the M2 SSD.
Best SSD on AMAZON:
SSD M2 NVMe Samsung: https://hfixt.com/nvme…
Best SSD on AMAZON:
SSD M2 NVMe Samsung: https://hfixt.com/nvme…
Forwarded from Milad Mahmoodian
YouTube
Create your own Network LAB with EVE-NG step by step
In this video, I show you how to set up a Emulated Virtual Environment and create your first lab with EVE-NG
=====DOWNLOAD=====
Windows image for EVE-NG https://drive.google.com/file/d/1PDUusIX0Iffhhe9SbR2c2C8QrdtPYu79/view
Download Cisco IOU/IOL Images Eve…
=====DOWNLOAD=====
Windows image for EVE-NG https://drive.google.com/file/d/1PDUusIX0Iffhhe9SbR2c2C8QrdtPYu79/view
Download Cisco IOU/IOL Images Eve…