بررسی سلامت و گزارشها
بررسی کنید که آیا یک رایانه میتواند Throne بدون رابط گرافیکی را اجرا کند، وضعیت Throne در حال اجرا را از خودش بپرسید، وضعیت systemd آن را بخوانید و گزارشهایش را پیدا کنید.
Throne بدون رابط گرافیکی دو بررسی داخلی دارد: Throne --check پیش از نخستین اجرا یا وقتی چیزی کار نمیکند، و Throne --health برای Throne در حال اجرا. همچنین وضعیت خود را به systemd اعلام میکند و گزارش (log) مینویسد.
Throne --check
Throne --check به شما میگوید که آیا این رایانه میتواند Throne بدون رابط گرافیکی را با پیکربندی فعلی اجرا کند. آن را با کاربر Throne و با همان گزینهها و متغیرهایی که Throne با آنها شروع میشود اجرا کنید. این فرمان هیچ چیزی را تغییر نمیدهد: هیچ فایلی نمیسازد، هیچ قفلی نمیگیرد، پایگاهداده را فقطخواندنی باز میکند و در کنار یک Throne در حال اجرا هم اجرا میشود.
برای هر مورد یک خط چاپ میکند، و هر جا راهحلی وجود داشته باشد، خطوط fix: را هم:
$ sudo /opt/Throne/Throne --check
[INFO] build: Throne <version>, Qt 6.x, Debian GNU/Linux 12 (bookworm) x86_64, kernel 6.1.0-28-amd64, euid 0, ruid 0
[INFO] data dir /var/lib/throne (root default): does not exist yet; the first start creates it
[ OK ] instance: none (no data dir yet)
...
[INFO] API key: /var/lib/throne/config/api.key is created on the first start
[ OK ] port 127.0.0.1:9095 (the Throne API, the headless default): free
[ OK ] port 127.0.0.1:2080 (the mixed proxy, inbound_port): free
...
result: 0 failed, 0 warnings
این فرمان این موارد را پوشش میدهد: بیلد، پوشهٔ دادهها، نمونهٔ در حال اجرا، تنظیمات، TLS، هسته، TUN، کیلسوییچ، کلید API، پورتها (API، ورودی mixed، پورت DNS، و Clash API و sing-box API وقتی روشن باشند)، Throneهای بدون رابط گرافیکی دیگر و مالکان TUN روی رایانه، مدیر سرویس و حالت راهاندازی دوباره، و شناسهٔ دستگاه.
فقط چیزی که بهطور کلی مانع کار کردن Throne شود [FAIL] است، و در این صورت فرمان با کد 1 خارج میشود. نبود دسترسیهای لازم برای TUN یا کیلسوییچ [WARN] است، همراه با فرمانهای setcap یا chmod u+s برای رفع آن، یا در کانتینر همراه با --cap-add NET_ADMIN و --device /dev/net/tun.
Throne --health
Throne --health از طریق سوکت نمونه (instance)، از Throne در حال اجرا میپرسد و یک خط JSON چاپ میکند. آن را با کاربر Throne و برای همان پوشهٔ دادهها اجرا کنید:
$ sudo /opt/Throne/Throne --health
{"api":"listening","core_restarts":0,"degraded":null,"headless_dialogs":0,"ok":true,"previous_crash":false,"previous_exit":{"at":1760700000,"code":75,"reason":"restart requested"},"ready":true,"state":"running","stuck_s":0}
وقتی Throne سالم باشد، با کد 0 خارج میشود. برای کدهای دیگر، کدهای خروج را ببینید.
| فیلد | معنی |
|---|---|
ok |
Throne کار میکند: شروع شده است، هسته متصل است، هیچ چیزی گیر نکرده است، Throne از هسته دست نکشیده است، و کیلسوییچ خاموش است یا کار میکند. کیلسوییچی که با پیکربندی فعلی نمیتواند کار کند، یا --no-kill-switch آن را خاموش کرده است، این مقدار را true نگه میدارد، چون راهاندازی دوباره نمیتواند آن را درست کند. این مقدار هرگز به یک سرور راهدور یا به نمایهٔ در حال اجرا بستگی ندارد، بنابراین راهاندازی دوبارهٔ Throne در زمانی که این مقدار false است، هنگام از کار افتادن یک سرور به چرخهٔ بیپایان نمیافتد. |
ready |
Throne شروع به کار را تمام کرده است. |
state |
idle، connecting، running، stopping، یا starting تا وقتی Throne شروع به کار کند. |
degraded |
null، یا دلیل اینکه Throne نمیتواند با پیکربندی فعلی کار کند. جدول زیر را ببینید. |
stuck_s |
چند ثانیه است که یک نمایه، فراتر از 90 ثانیهٔ نخست، در حال اتصال است، یا فراتر از 45 ثانیهٔ نخست، در حال توقف است؛ در غیر این صورت 0. تا وقتی بیشتر از 0 است، ok برابر false است. |
core_restarts |
تعداد دفعاتی که هسته دوباره راهاندازی شده است. |
headless_dialogs |
پرسشهایی که چون پنجرهای وجود ندارد نادیده گرفته شدهاند. این مقدار باید 0 بماند. گزارش آنها را در خطوط HEADLESS-DIALOG نام میبرد. |
previous_crash |
اجرای قبلی بهدرستی پایان نیافته است: کرش، kill -9 یا قطع برق. |
previous_exit |
اینکه اجرای قبلی چگونه پایان یافت، بهصورت {code, reason, at} (at بر حسب ثانیه از 1970)، یا null. پس از اینکه مدیر سرویس Throne را دوباره شروع کرد (کدهای 75، 70، 71)، دلیل در اینجا باقی میماند. |
api |
شنوندهٔ API: off، listening، key_invalid، failed، retrying (تا 30 ثانیه برای نشانیاش صبر میکند) یا address_missing (نشانیاش از همهٔ رابطهای شبکه حذف شده است). |
در نخستین لحظههای شروع، این خط فقط ok، ready، state و headless_dialogs را دارد.
مقدارهای degraded. وقتی چند مورد صدق کنند، Throne نخستین مورد را به این ترتیب گزارش میکند:
| مقدار | معنی |
|---|---|
core_gave_up |
هسته پشت سر هم شکست خورد و Throne از آن دست کشید. Throne برای مدیر سرویس با کد 70 خارج میشود، یا پس از سه شروع پیاپی از این دست، روشن میماند و هر 5 دقیقه هسته را دوباره امتحان میکند. |
core_unavailable |
پردازهٔ هسته در حال اجرا نیست. |
kill_switch_failed |
کیلسوییچ روشن است اما شکست خورده است. نمایهها رد میشوند. کیلسوییچ را ببینید. |
api_unavailable |
API روشن است اما گوش نمیدهد، برای مثال چون برنامهٔ دیگری پورت آن را در اختیار دارد یا فایل کلیدش قابل استفاده نیست. ok همچنان true میماند. |
tun_unavailable |
TUN وقتی Throne آخرین بار متوقف شد روشن بود، و Throne اکنون نمیتواند آن را روشن کند: دسترسیهای لازم را ندارد، یا چیز دیگری TUN را در اختیار دارد (تداخل TUN). Throne نمایه را بدون TUN اجرا نکرد. thronectl tun off این وضعیت را پاک میکند؛ سپس نمایه را با thronectl connect اجرا کنید. |
resume_suppressed |
Throne آخرین نمایه را دوباره اجرا نکرد، چون در هر یک از سه بار آخری که این کار را کرد، Throne یا هستهاش در کمتر از یک دقیقه متوقف شد. نمایه را با thronectl connect اجرا کنید؛ وقتی یک دقیقه اجرا شد، این وضعیت پاک میشود. |
vpn_auth_failed |
سرور یک نمایهٔ VPN اطلاعات ورود ذخیرهشدهٔ آن را رد کرد. وقتی نمایه متوقف شود، این وضعیت پاک میشود. |
vpn_challenge_pending |
سرور یک نمایهٔ VPN چیزی میخواهد که Throne خودش نمیتواند به آن پاسخ دهد، مانند ورود به حساب از طریق وب. Throne وقتی مهلت پرسش تمام شود، حداکثر پس از 5 دقیقه، آن را لغو میکند. |
مشخصات API این مقدارها را با جزئیات توضیح میدهد.
ایمیج Docker از Throne --health برای بررسی سلامت استفاده میکند. یک اسکریپت پایش (monitoring) که اطلاعات بیشتری میخواهد، میتواند خط HEALTH را به سوکت config/.instance در پوشهٔ دادهها بفرستد:
echo HEALTH | sudo socat -t 3 - UNIX-CONNECT:/var/lib/throne/config/.instance
پاسخ، mode، pid، uptime_s، version، tun_running، بلوک کامل api و فیلدهای thronectl status را هم دارد. اگر مسیر پوشهٔ دادهها 100 بایت یا بیشتر باشد، یا فایلسیستم آن سوکت نداشته باشد، سوکت به headless-<hash> منتقل میشود: برای root در /run/throne (در macOS، /var/run/throne) و برای کاربران دیگر در /tmp/throne-<uid>. در Windows، از --health استفاده کنید.
systemd: آمادگی، وضعیت و watchdog
یونیت عرضهشده از نوع Type=notify است. Throne از پردازهٔ اصلی خود این موارد را به systemd اعلام میکند:
READY=1وقتی پوشهٔ دادهها را در اختیار گرفته است، پایگاهداده باز است، API گوش میدهد (یا شکست خورده است)، هسته متصل است، وضعیت کیلسوییچ مشخص شده است و نمایهای که دوباره اجرا میشود در راه است. این معمولاً کمتر از 20 ثانیه طول میکشد. تا آن زمان Throne مهلت شروع را تمدید میکند، بنابراینTimeoutStartSec=90فقط شروعی را که گیر کرده است پایان میدهد. پس از سه شروع بدون هستهٔ کارا، به هر حال آمادگی را اعلام میکند.STATUS=کهsystemctl statusآن را نشان میدهد:Starting،Starting core،Core restarting 2/5،Idle،Connecting <profile>،Connected <profile>(با(Tun)وقتی TUN روشن است)،Stopping <profile>،Degraded: <reason>،StoppingوRestarting.WATCHDOG=1هر 20 ثانیه، تا وقتی حلقهٔ اصلیاش در حال اجراست (یکسومWatchdogSec=60). اگر حلقهٔ اصلی گیر کند، systemd سیگنالSIGABRTرا میفرستد و Throne را دوباره شروع میکند.STOPPING=1وقتی خروج را آغاز میکند، یاRELOADING=1پیش از اینکه در همان پردازه دوباره راهاندازی شود (--restart-mode exec).
Throne همچنین، با یا بدون systemd، پیشرفت کار خودش را زیر نظر دارد: نمایهای که 180 ثانیه در حال اتصال یا 90 ثانیه در حال توقف باشد باعث میشود Throne با کد 71 خارج شود، و هستهای که 60 ثانیه قابل استفاده نبوده باشد باعث میشود با کد 70 خارج شود. سپس مدیر سرویس آن را دوباره شروع میکند.
KillMode=mixed الزامی است. با آن، systemd سیگنال SIGTERM را فقط به Throne میفرستد، و Throne هسته و کیلسوییچ را بهترتیب متوقف میکند و سپس خارج میشود، معمولاً در چند ثانیه (TimeoutStopSec=45). SIGTERM یا SIGINT دوم هسته را بیدرنگ میبندد (kill). از systemctl kill استفاده نکنید: این فرمان مستقیماً به هسته و برنامهٔ کمکی کیلسوییچ سیگنال میفرستد.
گزارشها
Throne گزارش خود را در خروجی خطای استاندارد (standard error) و در config/logs/throne.log درون پوشهٔ دادهها مینویسد. محل خواندن آن:
| نحوهٔ اجرای Throne | گزارش |
|---|---|
| یونیت سیستمی systemd | journalctl -u throne -f |
| یونیت کاربری systemd | journalctl --user -u throne -f |
| Docker | docker compose logs -f throne |
| LaunchDaemon در macOS | /Library/Logs/Throne/throne.log |
| سرویس Windows | C:\ProgramData\Throne\config\logs\throne.log (سرویس خروجی خطای استاندارد ندارد) |
Throne بدون رابط گرافیکی گزارشها را به زبان انگلیسی مینویسد. --debug خطوط debug را اضافه میکند. --log-format قالب خروجی خطای استاندارد را تعیین میکند:
| قالب | خطوط |
|---|---|
auto |
وقتی خروجی خطای استاندارد به journal در systemd میرود journal، در غیر این صورت plain |
journal |
هر خط با یک اولویت syslog مانند <4> شروع میشود که journald آن را به اولویت پیام تبدیل میکند. journald زمان را اضافه میکند. |
plain |
هر خط با زمان محلی شروع میشود. |
خطوطی که ارزش جستوجو دارند:
EXIT <code>: <reason>: چرا Throne خارج شد. کدهای خروج را ببینید.Ready <n> ms after launch: شروع به کار تمام شده است.[API] Listening on …: جایی که API گوش میدهد.[Resume] …: اینکه آیا آخرین نمایه دوباره اجرا شد یا نه.[Kill switch] Not active (<code>): …: چرا کیلسوییچ کار نمیکند.[Watchdog] …: بررسیهای خود Throne روی پیشرفت کارش.HEADLESS-DIALOG: پرسشی که کسی نتوانست به آن پاسخ دهد.
وقتی یک اجرا بهدرستی پایان نیابد، گزارش آن با نام config/logs/crashed-<time>.log نگه داشته میشود و گزارشهای کرش به config/crashes/ میروند.