מודול php שרץ כל הזמן
-
איך עושים מודול php שרץ בצד השרת כל הזמן (לדוגמא כשהוא מזהה שינוי בDB הוא יעשה משהו)?
תודה. -
בדרך כלל לא עושים כאלו פעולות באפליקציית הווב, אלא ברכיב ישיר על מערכת ההפעלה.
במערכות לינוקס יש מנגנון מתזמן משימות ששמו cron, והוא נגיש בד"כ גם באירוח שיתופי דרך איזו שהיא הגדרה מתאימה בפאנל.
אבל מחיפוש באינטרנט אני רואה שניתן לשלוט על המנגנון מתוך הקוד PHP של האתר, אני לא מספיק מבין בזה בשביל לדעת פרטים מדוייקים,
ראה פה מאמר ארוך:
https://code.tutsplus.com/tutorials/managing-cron-jobs-with-php--net-19428
הגעתי אליו מתשובות הסטאק הללו:
https://stackoverflow.com/questions/35044216/how-to-run-a-background-task-in-php-web-application
https://stackoverflow.com/questions/120228/php-running-scheduled-jobs-cron-jobsהגעתי אליהם מחיפוש גוגל: php background task
הסיבה שזה לא מומלץ לעשות זאת מתוך קוד הPHP בצורה פשוטה של לולאה זה בגלל שPHP בנוי לעובד כתגובה לבקשות כאשר כל בקשה זה טריד חולף בן שניה מקסימום. היחס של שרת הווב לטרידים שהם סה"כ אוסף של בקשות מקליינטים, הינו "מזלזל": הוא יכול לסגור אותם אם נראה לו ש"הם עברו את הגבול" או בכלל כי עבר פסק זמן גדול בהם לא היו בקשות אז הוא מכבה הכל.
-
אירוע מתעורר.
אצטרך למצוא את הצורה/טריגר להריץ מהד"ב php (נ.ב. מדובר בpostgressql).תודה רבה
-
הוא לא צריך לרוץ בכלל עבור התצוגה. רק ברקע.
-
@chagold
טריגרים בpostgresql
https://www.postgresql.org/docs/9.1/static/sql-createtrigger.html -
@chagold ברור.
וכאן בדיוק נמצא המודל.
במודל אתה שם את הקוד ששאתה רוצה אחרי עידכון
וזה יהיה מכל מקום שיש בו עידכון - שמשתמש במודל.
ללא קשר כלל לתצוגה.לדוגמא: אם מימשת API שתוכנות חיצוניות יכולות להתממשק אליך, אם תשתמש במודל במקום כתיבה ישירות לDB, אז זה גם יעורר את האירוע
וגם תמיד יש לך אפשרות של טריגרים...
-
תודה רבה.
-
אם גורם העדכון הוא רק ממשק הווב, אז ברור שהוא זה שצריך להפעיל אותו.
אם הפעולה לוקחת זמן ממושך, אז כמו שכתבתי עדיף שהphp יפעיל משהו חיצוני בסגנון של exec.
אך אם יש גורמים אחרים מעדכנים אז אי אפשר לבנות על הPHP. ואז אכן הרעיון של הטריגרים שאמר @clickone הוא גם נכון (אגב לpostgres יש cron משלו בשם pgcron אבל כפי ש @clickone הסיק זה אכן לא נוגע למקרה שלך בגלל שזה לא תזמון אלא תגובה לשינוי). -
@dlt אמר במודול php שרץ כל הזמן:
אם גורם העדכון הוא רק ממשק הווב, אז ברור שהוא זה שצריך להפעיל אותו.
אם הפעולה לוקחת זמן ממושך, אז כמו שכתבתי עדיף שהphp יפעיל משהו חיצוני בסגנון של exec.
אך אם יש גורמים אחרים מעדכנים אז אי אפשר לבנות על הPHP. ואז אכן הרעיון של הטריגרים שאמר @clickone הוא גם נכון (אגב לpostgres יש cron משלו בשם pgcron אבל כפי ש @clickone הסיק זה אכן לא נוגע למקרה שלך בגלל שזה לא תזמון אלא תגובה לשינוי).זה בדיוק המקרה - שזה תגובה לעדכון של לקוח, אבל זה אמור להיות מאד ארוך.
תודה רבה. -
@chagold זה שזה ארוך לא אמור להיות מעניין.
פשוט שים אותו בטרייד נפרד בתוך הPHP.
https://stackoverflow.com/questions/70855/how-can-one-use-multi-threading-in-php-applications
או שתבקש מהPHP או מהטריגר להריץ EXEC חיצוני.אגב טריגרים כיום יכולים לעשות הרבה ברים. גם לשלוח מיילים וגם לבקש דברים מהPHP שלך.
אז אולי אתה צריך טריגר שיקרא לPHP שלך לדף מסויים ברגע שיש עידכון CDB. -
@clickone זהו שאני הסברתי שזה כן מעניין, ראה בהודעה לעיל.
https://stackoverflow.com/questions/2212635/best-way-to-manage-long-running-php-script -
בודאי שאפשר עם PHP, הנקודה היא שזה לא יהיה מהקונטקסט של שירות האינטרנט (למשל תגובה לבקשת ווב, שזה בעצם רץ תחת אפאצ' או IIS או כל שרת אינטרנט אחר) שאז לא עוזר טריד נוסף כי הכל תחת אותו תהליך. ולכן אמרתי כאפשרות את exce שמה אפשר לשים כפרמטר את php עם קובץ להרצה (ואז זה רץ כתהליך נפרד לחלוטין באופן בלתי תלוי).
6/16