תחומים
    • הרשמה
    • התחברות
    • חיפוש
    • קטגוריות
    • פוסטים אחרונים
    • משתמשים
    • חיפוש
    חוקי הפורום

    איך להפסיק sub process בתוך קונטיינר ב-docker בצורה נכונה?

    תכנות
    2
    5
    368
    טוען פוסטים נוספים
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
    תגובה
    • הגב כנושא
    התחבר בכדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • P
      ps נערך לאחרונה על ידי

      שלום
      בחברה אצלנו משתמשים ב-docker שנמצא על מחשב יוניקס (יובונטו)
      באחד הקונטיינרים יש מערכת לתיזמון משימות (task scheduler), שנקרא Cronicle. (לקוח מהקוד הפתוח https://github.com/jhuckaby/Cronicle)
      בגדול זה עובד בסדר, רק שנתקלתי בבעיה אחת - שאם אני רוצה להפסיק task באמצע הריצה שלו, ולוחצת על abort, הוא אמנם נעלם מהרשימה של המשימות שכרגע רצות. אבל אם אני מריצה פקודה לראות איזה פרוססים רצים בקונטיינר, הוא עדיין קיים ולא הפסיק.
      יש רעיון איך נכון לטפל בבעיה הזאת?
      כנראה שהסיגנל שנשלח הוא לא הנכון כדי להפסיק את הפרוסס (מדובר על JAR שרץ ע"י ג'אווה).
      איזה סינגל נכון לשלוח כדי להפסיק אותו?
      האם כדאי לשנות את הקוד של Cronicle אצלנו?
      או אולי פיתרון כזה (שלא ממש הבנתי): https://www.shellscript.sh/trap.html
      תודה מראש

      תגובה 1 תגובה אחרונה תגובה ציטוט 0
      • dovid
        dovid ניהול נערך לאחרונה על ידי dovid

        אני לא מכיר את הספריה הזו.
        אבל מהלשון "אני לוחצת" נשמע שזה ממשק מוכן שלא בניתם, ויש לך רק ממשק משתמש ידידותי ללא log או משהו בסגנון.
        זה ממשק מוכן שלהם? יש כתובת בה אפשר לשלוט דרך הדפדפן בtask?

        אני גם ממלית לך לפתוח issues פה: https://github.com/jhuckaby/Cronicle/issues
        אם לא יועיל לא יזיק ולדעתי יועיל כי זה נראה פרוייקט עם פעילות.

        תכתבו קודם את השאלה בתמצות ממש: לחיצה על abort (אם זה גם בממשק התכנותי אז פקודת abort_job), לא סוגרת את התהליך (והוא ממשיך לרוץ או מושהה? בדקו זאת ע"י ps aux בעמודה stat).
        אחרי זה תתכתבו את הרקע: 1. רץ על docker, 2 שרץ באובנטו. התהליך הוא יישום JAVA.

        מדי דברי אני רואה שלא בטוח שהם תומכים בכלל בdocker שכן יש להם issues פתוח על זה: Add docker support #4

        אפשר ליצור קשר dovid@tchumim.com

        P תגובה 1 תגובה אחרונה תגובה ציטוט 1
        • P
          ps @dovid נערך לאחרונה על ידי

          תודה על התגובה
          אכן יש להם ממשק שלהם שדרכו אני לוחצת
          מקריאת ה-issue הפתוח בלינק שהבאת, נראה שאין להם שום מושג בקשר לתמיכה ב-docker
          מבחינתי אין לי בעיה להיכנס לקוד שמועתק אלינו ולשנות/להכניס תיקון
          השאלה איזה פקודה אני צריכה להריץ כדי שיהרוג את הפרוסס שנמצא בתוך הקונטיינר. נראה שיש כמה סוגי סיגנלים לשלוח, ואולי הם לא משתמשים בסיגנל הנכון.
          בכל מקרה גם אכניס שם שאלה.

          תגובה 1 תגובה אחרונה תגובה ציטוט 2
          • dovid
            dovid ניהול נערך לאחרונה על ידי

            אם את יכולה להיכנס לקוד, אדרבא תדביקי פה ונבחן אותו.
            הsignal הוא 9 (SIGKILL) ולא נראה לי שזה הטעות שלהם.

            אפשר ליצור קשר dovid@tchumim.com

            תגובה 1 תגובה אחרונה תגובה ציטוט 1
            • P
              ps נערך לאחרונה על ידי

              אוקיי מצאתי פיתרון פשוט וקל, רושמת פה למקרה שיעזור למישהו
              ה-cronicle לא הריץ את ה-jar ישירות, אלא היה לי shell שהריץ אותו
              ה-abort עצר את ה-shell אבל ה-shell לא עצר את הג'אווה.
              כדי לגרום לג'אווה למות כאשר הshell מת, צריך להריץ את הג'אווה בתוספת הפקודה exec
              לדוגמא: exec java -jar MyProgram.jar
              ואז לא נוצר לג'אווה פרוסס משל עצמו, אלא החיים שלו נכנסים לתוך החיים של הshell
              קרדיט ל:
              http://perfspy.blogspot.com/2015/02/trap-killing-signals-inside-docker.html

              תגובה 1 תגובה אחרונה תגובה ציטוט 3
              • 1 / 1
              • פוסט ראשון
                פוסט אחרון
              בא תתחבר לדף היומי!