ווטסאפ - לינוקס, BSD, קוד פתוח ותוכנה חופשית בעברית. Whatsup - Linux, BSD, open source and free software in Hebrew

 
 
  כניסת חברים · רישום · שכחתי סיסמה  
tux the penguin
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
WobnI - offlineאורח · ·
 

הודעה פורסם: 05/09/2015 - 17:46
נושא ההודעה: הרצת סקריפט כ-daemon תחת systemd

הפצת הסטריימר שלי משתמשת ב-systemd, אני צריך להריץ סקריפט בעלייה שירוץ ברקע.
כשאני מנסה להפעיל את service דרך systemd, הפקודה נתקעת אני צריך ללחוץ ctrl+c בשביל להמשיך, אם אני מנסה לעלות את המערכת מאפס, היא נתקעת בעליה כשהיא מעלה את daemon שלי.

זה קובץ ה-service שאני מתשמש בו כרגע:
קוד:

[Unit]
Description=load external storage mounts
ConditionFileIsExecutable=/storage/external_storage_mount.sh

[Service]
Type=oneshot
ExecStart=/storage/external_storage_mount.sh

[Install]
WantedBy=multi-user.target

יש למישהו רעיון איך לפתור את זה?
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
צפריראורח · ·
 

הודעה פורסם: 05/09/2015 - 18:24
נושא ההודעה:

יש לי הרגשה שזו לא הדרך הנכונה. נראה לי שרצוי להחליף את היחידה הזו ביחידה מסוג mount. כלומר, במקום סיומת service, להשתמש בסיומת mount. ר' תיעוד על systemd.mount .
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
WobnI - offlineאורח · ·
 

הודעה פורסם: 05/09/2015 - 19:00
נושא ההודעה:

צפריר :
יש לי הרגשה שזו לא הדרך הנכונה. נראה לי שרצוי להחליף את היחידה הזו ביחידה מסוג mount. כלומר, במקום סיומת service, להשתמש בסיומת mount. ר' תיעוד על systemd.mount .


אבל זה סקריפט, הוא לא רק מעגן ומסיר עיגון, הוא גם בודק תנאים לדעת לבצע אותם.
המידע שאני רוצה לעגן אמור להיות מעוגן ב-nfsv4, להפצה הזאת יש תמיכה בקרנל לזה אבל לא ב-userspace, ככה שצריך להישתמש במאגר לא רישמי ולא ניתן להגדיר ל-systemd מיקום אלטרנטיבי לחיפוש ה-util הרלוונטי כי המערכת הראשית היא RO.

מה עוד ששמתי לב ש-systemd לא מזהה לי stale nfs handlers ולא יודעת להסיר עיגון או לבצע אותו מחדש.

ככה שאני צריך לעשות את זה לבד.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
shtrb offlineאורח · ·
 

הודעה פורסם: 06/09/2015 - 08:56
נושא ההודעה:

אני לא יודע אם זה יעזור לך , אבל משהוא דומה היה לי לא מזמן בהקשר של מערכת קבצים על fuse.
הפתרון שלי היה :

1. פירוק הservice לשתיים (mount + service)
2. הוספה של RemainAfterExit=yes תיקון fstab שיהיה _netdev באופציות עגינה, ו
After=network.target remote-fs.target בתסריט העגינה.

שים זמן כשזה נראה "תקוע" אם מדובר על כ 60 שניות יש סיכוי טוב שתלות מסויימת (של הטסריט) לא עלתה (במקרה שלי זה היה network.target) , קלאסי זה בקשת הזדהות ו חוסר רשת.

RemainAfterExit=yes : אומר תתן להתליך להשאר רץ אחרי יציאה.
_netdev: מגדיר את אפשרות העגינה כ remote-fs
after= מגדיר שהסרביס יעלה אחרי המטרות האלה.

נ.ב. זה לא יעזור לך אם יש לך two factor auth או הזדהות דרך ממשק וובי
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
WobnI - workאורח · ·
 

הודעה פורסם: 06/09/2015 - 09:30
נושא ההודעה:

shtrb offline :
אני לא יודע אם זה יעזור לך , אבל משהוא דומה היה לי לא מזמן בהקשר של מערכת קבצים על fuse.
הפתרון שלי היה :

1. פירוק הservice לשתיים (mount + service)
2. הוספה של RemainAfterExit=yes תיקון fstab שיהיה _netdev באופציות עגינה, ו
After=network.target remote-fs.target בתסריט העגינה.

שים זמן כשזה נראה "תקוע" אם מדובר על כ 60 שניות יש סיכוי טוב שתלות מסויימת (של הטסריט) לא עלתה (במקרה שלי זה היה network.target) , קלאסי זה בקשת הזדהות ו חוסר רשת.

RemainAfterExit=yes : אומר תתן להתליך להשאר רץ אחרי יציאה.
_netdev: מגדיר את אפשרות העגינה כ remote-fs
after= מגדיר שהסרביס יעלה אחרי המטרות האלה.

נ.ב. זה לא יעזור לך אם יש לך two factor auth או הזדהות דרך ממשק וובי


כפי שאמרתי, אני לא יכול לשנות את fstab כי המערכת מותקנת על מחיצה שהיא ro.
מעבר לזה, התקיעה מתרחשת גם כשהמערכת למעלה ואין שם תלויות כשאני מריץ את זה משורת פקודה.

כמוכן, אני לא יכול לפרק את זה כי אין לי איך להבהיר ל-mount איפה לחפש את mount.nfs4 מאותה סיבה שאני לא יכול לשנות את fstab.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
רם אוןאורח · ·
 

הודעה פורסם: 06/09/2015 - 09:43
נושא ההודעה: נראה שהתסריטים שלך שוכחים לצאת :)

כאשר מערכת עולה, כל תסריט צריך לדווח על מידת ההצלחה שלו. אם אתה לא יוצא עם exit 0 אז יש מצב שהמערכת עדיין מחכה לפלט ממך. (קלט מבחינתה).

לא בדקתי עם זה עם הסיסטמד, אבל הייתי בודק בכיון.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
צפריראורח · ·
 

הודעה פורסם: 06/09/2015 - 10:18
נושא ההודעה:

מהם התנאים שהסקריפט בודק? האם חלק מהם הם מידע שזמין ל־systemd? אם כן, אפשר לכתוב את זה כחלק מההגדרות.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
WobnI - workאורח · ·
 

הודעה פורסם: 06/09/2015 - 10:57
נושא ההודעה: Re: נראה שהתסריטים שלך שוכחים לצאת :)

רם און :
כאשר מערכת עולה, כל תסריט צריך לדווח על מידת ההצלחה שלו. אם אתה לא יוצא עם exit 0 אז יש מצב שהמערכת עדיין מחכה לפלט ממך. (קלט מבחינתה).

לא בדקתי עם זה עם הסיסטמד, אבל הייתי בודק בכיון.


הבעיה שלי היא ש-systemd מנסה להריץ את הסקריפט שלא כ-daemon אלא כסקריפט וצריך להריץ אותו כ-daemon כי יש לו לולאה אין סופית.

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

אנסה לחפש איך מבצעים תפיסת סיגנלים במקרה של הליך נפרד.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
WobnI - workאורח · ·
 

הודעה פורסם: 06/09/2015 - 11:02
נושא ההודעה:

צפריר :
מהם התנאים שהסקריפט בודק? האם חלק מהם הם מידע שזמין ל־systemd? אם כן, אפשר לכתוב את זה כחלק מההגדרות.


אינני יודע, הסקריפט די פשוט, כל 5 שניות הוא בודק האם קיים פרוטוקול nfs על השרת, אם כן הוא מנסה לעגן את הספריה הראשית של הסרבר (אם יש צורך) ואז מעגן את שאר הספריות כ-bind (עם צריך).
אם לא קיים הפרוטוקול, אז כל הסיפריות שעוגנו ולא שוחררו משוחררות בכוח.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 06/09/2015 - 11:14
נושא ההודעה: Re: נראה שהתסריטים שלך שוכחים לצאת :)

WobnI - work :
רם און :
כאשר מערכת עולה, כל תסריט צריך לדווח על מידת ההצלחה שלו. אם אתה לא יוצא עם exit 0 אז יש מצב שהמערכת עדיין מחכה לפלט ממך. (קלט מבחינתה).

לא בדקתי עם זה עם הסיסטמד, אבל הייתי בודק בכיון.


הבעיה שלי היא ש-systemd מנסה להריץ את הסקריפט שלא כ-daemon אלא כסקריפט וצריך להריץ אותו כ-daemon כי יש לו לולאה אין סופית.



RemainAfterExit=yes ו oneshot
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
WobnI - workאורח · ·
 

הודעה פורסם: 06/09/2015 - 11:15
נושא ההודעה: Re: נראה שהתסריטים שלך שוכחים לצאת :)

Anonymous :
WobnI - work :
רם און :
כאשר מערכת עולה, כל תסריט צריך לדווח על מידת ההצלחה שלו. אם אתה לא יוצא עם exit 0 אז יש מצב שהמערכת עדיין מחכה לפלט ממך. (קלט מבחינתה).

לא בדקתי עם זה עם הסיסטמד, אבל הייתי בודק בכיון.


הבעיה שלי היא ש-systemd מנסה להריץ את הסקריפט שלא כ-daemon אלא כסקריפט וצריך להריץ אותו כ-daemon כי יש לו לולאה אין סופית.



RemainAfterExit=yes ו oneshot


ניסיתי, נתקע באותה מידה
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
צפריראורח · ·
 

הודעה פורסם: 06/09/2015 - 11:20
נושא ההודעה:

איך הוא בודק האם קיים פרוטוקול nfs על השרת? מה יוכל להפריע לזמינות?

מעבר לכך, יכול להיות שהסקריפט הזה יכול להיות "שירות" שיספר ל־systemd מתי שהוא מוכן. כלומר ליצור יחידה מסוג (Type)‏ notify וכשהכול מוכן לאותת ל־systemd בעזרת systemd-notify.

ואז אפשר להשתמש בכלים הרגילים (יחסית) לכל שאר ה־mounts. כל מה שצריך לדאוג הוא שהיחידות שלה יהיו After השירות שלך (אם אני מבין נכון איך שזה עובד).
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
WobnI - workאורח · ·
 

הודעה פורסם: 06/09/2015 - 13:59
נושא ההודעה:

צפריר :
איך הוא בודק האם קיים פרוטוקול nfs על השרת? מה יוכל להפריע לזמינות?

rpcinfo addr nfs מחזיר הם יש לשרת nfs פתוח.
בעית זמינות? אני מכבה את השרת.
צפריר :

מעבר לכך, יכול להיות שהסקריפט הזה יכול להיות "שירות" שיספר ל־systemd מתי שהוא מוכן. כלומר ליצור יחידה מסוג (Type)‏ notify וכשהכול מוכן לאותת ל־systemd בעזרת systemd-notify.

אוקי, מה אני יכול לעשות במקרה של קבלת הודעה?

צפריר :

ואז אפשר להשתמש בכלים הרגילים (יחסית) לכל שאר ה־mounts. כל מה שצריך לדאוג הוא שהיחידות שלה יהיו After השירות שלך (אם אני מבין נכון איך שזה עובד).

הפקודה הבאה לא עובדת שלי:
קוד:
mount 't nfs4 10.0.0.1:/storage /storage/nfs_mnt

אני לא רואה דרך איך לגרום ל-systemd לדעת איפה יושב הקובץ הרצה.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 06/09/2015 - 14:16
נושא ההודעה:

יכול להיות שזה וריאציה של https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/1430280

האם תוכל בבקשה להריץ :

systemctl show -p Wants -p After something.service

כאשר something זה שם הסרביס הנוכחי ?
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 06/09/2015 - 14:19
נושא ההודעה:

Anonymous :
יכול להיות שזה וריאציה של https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/1430280

האם תוכל בבקשה להריץ :

systemctl show -p Wants -p After something.service

כאשר something זה שם הסרביס הנוכחי ?


תתעלם אמרת שניסית להרים גם לאחר שקיבלת tty
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
צפריראורח · ·
 

הודעה פורסם: 06/09/2015 - 18:45
נושא ההודעה:

מי שמריץ את הפקודה זה לא systemd ישירות אלא mount. הפקודה שהוא מריץ היא:
קוד:

/sbin/mount.$fstype

דאג שזה יצביע על התוכנית שלך (ולו בעזרת dpkg-divert).
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
WobnI - offlineאורח · ·
 

הודעה פורסם: 06/09/2015 - 21:40
נושא ההודעה:

צפריר :
מי שמריץ את הפקודה זה לא systemd ישירות אלא mount. הפקודה שהוא מריץ היא:
קוד:

/sbin/mount.$fstype

דאג שזה יצביע על התוכנית שלך (ולו בעזרת dpkg-divert).


אני כבר לא יודע איך להגיד את זה, אין לי יכולת לכתוב לכל מקום במערכת הקבצים שזה לא תחת /storage כי היא read only.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אלכס___אורח · ·
 

הודעה פורסם: 07/09/2015 - 02:11
נושא ההודעה: לוגים לוגים

קוד:
ExecStart=/bin/sh -c "/your/script/location/external_storage_mount.sh >> /your/path/to/wirtable/location/for/external_storage_mount.log 2>&1"



תבדוק את האופציה הזו.
http://go2linux.garron.me/linux/2010/12/setsid-how-execute-commands-after-you-exit-shell-prompt-866/
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
צפריראורח · ·
 

הודעה פורסם: 07/09/2015 - 10:45
נושא ההודעה:

אז איך יש לך אפשרות להתערב בכלל בתהליך העליה? איך אתה יכול להוסיף שירות אם אין לך יכולת לשנות את ‎/etc ?
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
WobnI - workאורח · ·
 

הודעה פורסם: 07/09/2015 - 11:19
נושא ההודעה:

צפריר :
אז איך יש לך אפשרות להתערב בכלל בתהליך העליה? איך אתה יכול להוסיף שירות אם אין לך יכולת לשנות את ‎/etc ?


אתה יכול להגדיר ל-systemd מאיפה לקרוא עוד services
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
WobnI - offlineאורח · ·
 

הודעה פורסם: 09/09/2015 - 22:03
נושא ההודעה:

נראה שה-service הבא עובד:
קוד:
[Unit]
Description=load external storage mounts
ConditionFileIsExecutable=/storage/external_storage_mount.sh

[Service]
Type=fork
ExecStart=/bin/nohup /storage/external_storage_mount.sh

[Install]
WantedBy=multi-user.target


ידנית זה עובד, נשאר לי לבדוק רק boot.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
WobnI - offlineאורח · ·
 

הודעה פורסם: 09/09/2015 - 22:09
נושא ההודעה:

עובד גם אחרי boot, תודה לכולם על העזרה.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
הצגת הודעות מלפני:     
מעבר אל:  
כל הזמנים הם GMT + 2 שעות
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
PNphpBB2 © 2003-2004 

תוכן הדיון

  1. אורח [WobnI - offline]
  2. אורח [צפריר]
  3. אורח [WobnI - offline]
  4. אורח [shtrb offline]
  5. אורח [WobnI - work]
  6. אורח [רם און]
  7. אורח [צפריר]
  8. אורח [WobnI - work]
  9. אורח [WobnI - work]
  10. אורח
  11. אורח [WobnI - work]
  12. אורח [צפריר]
  13. אורח [WobnI - work]
  14. אורח
  15. אורח
  16. אורח [צפריר]
  17. אורח [WobnI - offline]
  18. אורח [אלכס___]
  19. אורח [צפריר]
  20. אורח [WobnI - work]
  21. אורח [WobnI - offline]
  22. אורח [WobnI - offline]