پرش به مطلب اصلی

تماشای اجرای یک فرایند

هدف​

ببینید فرایند شما واقعاً چه کرده است: هر بار که اجرا شده، و برای هر اجرا، گام‌هایی که برداشته است به ترتیب — و اگر متوقف شده، دلیلش.

پیش‌نیازها​

  • فرایند منتشر شده باشد. پیش‌نویس هرگز اجرا نشده است.
  • در آن محیط سازنده باشید.

کجاست​

فرایند را باز کنید و در ریل، کنار جریان و کوفرم‌ها، اجراها را انتخاب کنید. این تنها مدخل آن ریل است که چیزی برای ویرایش نیست: دو تای دیگر خودِ فرایندند و این تاریخچهٔ آن است.

فهرست​

همهٔ اجراها، تازه‌ترین در بالا — برخلاف فهرست کارهای شما، و این عمدی است: صف کار را از قدیمی‌ترین پیش می‌برند چون بیش از همه منتظر مانده، اما کسی که فهرست اجراها را باز می‌کند تقریباً همیشه دربارهٔ همین اجرای اخیر می‌پرسد.

هر ردیف زمان آغاز، وضعیت (در حال اجرا، پایان‌یافته یا لغوشده)، نسخه‌ای که روی آن آغاز شده، و در انتظار را نشان می‌دهد.

ستونی که باید خواند: «در انتظار»​

نام کسانی را می‌آورد که کار هنوز نزد آن‌هاست. همین است که اجرای سالم را از اجرای گیرکرده جدا می‌کند:

  • نام‌ها — اجرا منتظر همان افراد است؛ این عادی است و مشکل نیست. گامی که به همهٔ دارندگان یک نقش پیشنهاد شده، سه نام اول را می‌آورد و بعد می‌گوید چند نفر دیگر مانده‌اند؛ گامی که یک نفر برداشته، نام همان یک نفر را می‌آورد.
  • هیچ‌کس، روی اجرایی که هنوز «در حال اجرا» است — همین را باید دید. چیزی منتظر کسی نیست و اجرا هم پایان نیافته، پس جایی متوقف شده است. بازش کنید.

وقتی گامی باز است اما واگذاری‌اش به هیچ‌کس نرسیده هم هیچ‌کس نوشته می‌شود — کاری که وجود دارد و در فهرست هیچ‌کس نیست. همان را هم باید دید، و تاریخچه می‌گوید کدام گام و چرا.

یادداشت

نامی که نمی‌شناسید، یا چیزی مانند systemuser:9f3c…، یعنی محیط نتوانسته آن شخص را پاسخ دهد — معمولاً کاربری که پس از ایجاد آن کار حذف شده است.

چه کسی کار را نگه داشته است​

زیر نمودار، اجرایی که چیزی در آن باز مانده باشد فهرست در انتظار را نشان می‌دهد: برای هر گامی که از آن نگذشته یک ردیف، با افرادی که کار نزد آن‌هاست، زمان آغاز انتظار، مدت انتظار، و مهلت.

این پاسخِ همان پرسشی است که معمولاً با آن سراغ یک اجرای متوقف می‌روند. تاریخچه می‌گوید چه گذشته و نمودار می‌گوید اجرا تا کجا رسیده؛ هیچ‌کدام نمی‌گویند حالا نوبت چه کسی است.

این کارها را اینجا نمی‌توانید انجام دهید، و این عمدی است. اینجا نمای سازندهٔ ماشین است و با دسترسی‌های شخصی که کار برای اوست اجرا نمی‌شود. کار در پوستهٔ پلتفرم انجام می‌شود: برنامه را باز کنید، سپس سینی کارها در نوار بالا.

واگذاری یک کار به شخص دیگر​

یک کار هست که از همین‌جا می‌توانید با یک وظیفه انجام دهید: واگذاری، روی همان ردیف.

وقتی به کارش می‌آید که شخصی که کار نزد اوست نمی‌تواند انجامش دهد — رفته است، در دسترس نیست، یا کار به گروه اشتباه رسیده. واگذاری را برگزینید، کسی را انتخاب کنید و تأیید کنید. کار از دست دارندهٔ فعلی بیرون می‌آید و به شخصی که نام برده‌اید پیشنهاد می‌شود؛ او مانند هر کار دیگری با باز کردنش آن را برمی‌دارد.

این اختیار با آنچه در پوستهٔ پلتفرم هست فرق دارد، و دانستن اینکه از کدام استفاده می‌کنید ارزش دارد. واگذاری در فهرست کارهای خود شخص را تنها دارندهٔ کار می‌تواند به کار ببرد — پاسخِ «من دارم می‌روم» است. این یکی از آنِ شماست چون اصلاً می‌توانید این صفحه را باز کنید — پاسخِ «کسی رفته است» است. در هر دو حالت کار باید هنوز باز باشد: تصمیمی که گرفته شده، واگذارشدنی نیست.

اجرا، گام به گام — روی نمودار​

یک اجرا را انتخاب کنید؛ بالای تاریخچه‌اش، اجرا کشیده می‌شود.

این نمودارِ شما با گامِ جاریِ روشن‌شده نیست، و همین تفاوت اصل مطلب است. یک اجرا هر چند بار که بخواهد به یک گام سر می‌زند: ردی که کار را بازمی‌گرداند سه بار به همان گام می‌رسد، و روشن‌کردن آن گام یک جعبهٔ «سرزده‌شده» نشان می‌دهد — نه آن سه بار، نه ترتیبشان، و نه اینکه به کدامشان نگاه می‌کنید.

پس اجرا باز می‌شود. برای هر گامی که اجرا برداشته یک شکل، به ترتیب رخ دادن، با شکل‌ها و خطوط شنای خودِ شما:

  • گامی که دو بار پیموده شده دو بار می‌آید، و دومی می‌گوید گذر ۲. گذر سوم ستون سوم است، پس حلقه رو به جلو خوانده می‌شود نه به‌صورت فلشی که برمی‌گردد.
  • مسیرهای یک fork ردیف‌های موازی‌اند، هر کدام تا زنده است روی خط خودش می‌ماند، و join همهٔ آن‌ها را به گامی که فرایند از آن ادامه می‌دهد می‌کشد.
  • جایی که اجرا اکنون هست با دورخط کهربایی و عبارت اکنون اینجا مشخص است. جایی که مسیری متوقف شده با دورخط قرمز و اینجا متوقف شد.
  • خطوط شنا از آنِ شماست. یک نوار برای هر خط شنا، نه یکی برای هر گذر — خط شنا یعنی یک شخص، و دو نوار «مدیر» یعنی دو ردیف برای یک نفر.

خود تاریخچه پنج ستون دارد: زمان رویداد، چه رخ داده، گامی که در آن رخ داده، نوع آن گام، و هر جزئیاتی که رویداد با خود دارد — یال یک انشعاب، مهلتی که گذشته، دلیل توقف یک نشانه.

ستون گام، نام گام را می‌خواند؛ همان که در طراح گذاشته‌اید. پیش‌تر شناسه‌ای را چاپ می‌کرد که طراح می‌سازد — n-start، n-3 — که به هیچ‌کس چیزی نمی‌گفت. گامی که فرایند دیگر ندارد، همچنان شناسه‌اش را نشان می‌دهد، چون تنها چیز درستی است که از آن مانده.

روی یک شکل کلیک کنید تا تاریخچهٔ زیرین به همان گام محدود شود: آنچه موتور در آنجا کرد و نه چیز دیگر. نمایش کل اجرا آن را بازمی‌گرداند.

نمودار بر اساس نسخه‌ای است که اجرا می‌شود​

اجرا با همان نسخه‌ای پایان می‌یابد که با آن آغاز شده، حتی اگر از آن پس دو بار منتشر کرده باشید. نمودار اجرا را دنبال می‌کند نه پیش‌نویس امروز را — پس آنچه می‌بینید همان است که واقعاً اجرا شد. اگر آن نسخه دیگر ذخیره نباشد، نمودار کشیده نمی‌شود و تنها تاریخچه نشان داده می‌شود.

گام‌به‌گام چه شد​

تاریخچه به ترتیب وقوع می‌آید:

آنچه می‌بینیدمعنایش
اجرا آغاز شد / اجرا پایان یافتخودِ نمونه
رسید بهفرایند به آن گام رسید
انشعابیک شاخه راه خروج را برگزید، و اینکه از کدام اتصال رفت
انشعاب موازی / پیوستنیک fork چند مسیر هم‌زمان ساخت و یک join آن‌ها را بازآورد
کار ایجاد شد / کار انجام شدکاری نزد شخصی رفت و بازگشت. کارِ انجام‌شده می‌گوید کدام دکمه زده شد و چه کسی آن را زد
مسیر پایان یافت / مسیر لغو شدیک مسیر تمام شد — فرایندِ دارای fork چند مسیر دارد
متوقف شدمهم‌ترین: فرایند نتوانست ادامه دهد، و دلیلش نوشته شده است

متوقف شد دلیل وجود این صفحه است. فرایندی که می‌ایستد — شاخه‌ای که هیچ شرطش درست نبود، اسکریپتی که تجزیه نشد، کاری که به کسی ارجاع نشد، نتیجه‌ای که اتصالی از آن بیرون نمی‌رود — دقیقاً همان لحظه ثبت می‌کند چه ایرادی بود. آن جمله پاسخ «چرا هیچ اتفاقی نیفتاد» است.

اجرای بسیار طولانی​

اجرایی که هزاران بار حلقه زده، تاریخچه‌ای بیش از آنچه صفحه نشان می‌دهد دارد. در آن حالت همین را می‌گوید: نخستین گام‌ها فهرست می‌شوند و بقیه نه. هرگز بی‌صدا چند گام نخست را به‌جای همهٔ داستان نشان نمی‌دهد.

اجرایی با مسیرهای بسیار​

اجرایی که بیش از توان نمودار انشعاب داشته، همین را بالای نمودار می‌گوید: برخی شاخه‌ها در تصویر نیستند. تاریخچهٔ زیر دست‌نخورده است — آن در هر حال سابقهٔ کامل است.

در دست گرفتن یک اجرا​

این صفحه فقط برای تماشا نیست. کنار نوار عنوان، کنترل‌هایی هست که یک اجرای در جریان ارائه می‌دهد — اجرای پایان‌یافته هیچ‌کدام را ندارد، چون دیگر چیزی برای نگه‌داشتن، رهاکردن یا خاتمه‌دادن نمانده است.

توقف​

توقف اجرا را نگه می‌دارد. هر مسیر، هر کار و هر مهلت دقیقاً همان‌جا که هست می‌ماند و تا ادامه ندادن شما چیزی پیش نمی‌رود. اجرا متوقف‌شده خوانده می‌شود، نه لغوشده؛ و این تفاوت مهم است: اجرای متوقف‌شده زنده است، و کسی که «لغوشده» بخواند می‌رود و فرایند را از نو شروع می‌کند.

وقتی از آن استفاده کنید که اجرا کاری می‌کند که نمی‌خواستید و لحظه‌ای برای نگاه‌کردن لازم دارید — پیش از این، تنها راهِ بازداشتن یک اجرا لغو آن بود که برگشت‌پذیر نیست.

ادامه​

ادامه اجرا را دقیقاً از همان‌جا که ایستاده بود رها می‌کند.

یک نکته را انتظار داشته باشید: زمان‌سنجی که در مدت توقف سررسیده باشد بی‌درنگ عمل می‌کند. آن لحظه گذشته است و به اجرا بازگردانده نمی‌شود — گامی که تا جمعه منتظر بوده و دوشنبه ادامه یابد، دوشنبه گامش را برمی‌دارد.

خاتمه​

خاتمه اجرا را برای همیشه تمام می‌کند. هر مسیر همان‌جا که هست می‌ایستد و کارهایی که در صندوق افراد گذاشته بود پس گرفته می‌شود — کسی با تصمیمی که دیگر فرایندی پشتش نیست تنها نمی‌ماند. رویداد هنگام لغو فرایند اجرا می‌شود، و این تنها لحظه‌ای است که اجرا می‌شود.

از شما تأیید خواسته می‌شود، و دلیل. دلیل اختیاری است — «خاتمه بده» دستور کاملی است — اما در تاریخچه نوشته می‌شود، و آنجا همان جایی است که نفر بعدی به دنبال پاسخ «بر سر این یکی چه آمد» می‌گردد.

اجرای خاتمه‌یافته از اینجا دوباره شروع نمی‌شود. به‌جای آن فرایند را از نو آغاز کنید.

مسیری که متوقف شده، و تلاش دوباره​

وقتی مسیری نتواند گامش را بردارد، بالای کارهای باز بخشی به نام مسیرهای متوقف‌شده پیدا می‌شود: یک سطر برای هر مسیر، با نام گامی که روی آن ایستاده و دکمهٔ تلاش دوباره کنارش.

تاریخچه می‌گوید چرا متوقف شده — انشعابی که هیچ شرطش درست نبوده، اسکریپتی که تجزیه نشده، رکوردی که نبوده. نخست همان علت را رفع کنید؛ آنگاه تلاش دوباره مسیر را روی همان گام می‌گذارد و بار دوم درخواست می‌کند.

دو نکته:

  • همان نسخه‌ای اجرا می‌شود که اجرا رویش است، مانند هر گام دیگر. انتشار دوباره‌ی فرایند آنچه را یک اجرای در جریان اجرا می‌کند تغییر نمی‌دهد، پس عیبِ خودِ طرح با انتشار دوباره و تلاش دوباره رفع نمی‌شود — آن اجرا به همان شکل شکست خواهد خورد. تلاش دوباره برای علتی است که دیگر نیست: رکوردی که نبوده، سرویسی که پایین بوده، تنظیمی که کسی پرش نکرده بوده.
  • فقط روی اجرایی که هنوز در جریان است. به مسیرهای یک اجرای خاتمه‌یافته تلاش دوباره پیشنهاد نمی‌شود: آغاز دوبارهٔ یکی از آن‌ها یعنی از سر گرفتن فرایندی که کسی عمداً تمامش کرده است.

انتقال یک اجرا به نسخهٔ تازه​

نمی‌توانید، و این عمدی است. یک اجرا روی همان نسخه‌ای که با آن آغاز شده به پایان می‌رسد. راهی برای بردن آن به طرحی تازه‌تر نیست، چون دو سند لازم نیست حتی گام‌های یکسانی داشته باشند — اجرا روی گامی ایستاده که نسخهٔ تازه ممکن است نامش را عوض کرده، به خط دیگری برده یا حذفش کرده باشد، و هیچ قاعده‌ای نمی‌تواند درست حدس بزند کدام یک از این‌هاست.

به‌جایش: نسخهٔ تازه را منتشر کنید تا هر اجرایی که از این پس آغاز شود از آن استفاده کند، و بگذارید اجراهای در جریان تمام شوند. اگر اجرایی در جریان واقعاً باید طرح تازه را دنبال کند، خاتمه‌اش دهید، دلیل را بنویسید، و اجرای تازه‌ای آغاز کنید.