שימוש בקובץ services-config.yaml
כשמשתמשים במנהל השירותים הפשוט של Linux כדי לבצע העברה, Migrate to Containers יוצר קובץ ארטיפקט חדש, services-config.yaml.
אפשר להשתמש בקובץ הזה כדי לשלוט באתחול האפליקציה בקונטיינר שנפרס.
לדוגמה, אחרי שמבצעים מיגרציה של מאגר התגים, עורכים את הקובץ services-config.yaml כדי לשלוט באתחול האפליקציה באופן הבא:
- הסרת אפליקציות מהקובץ
- הוספת אפליקציות לקובץ
- עריכה של מאפייני האתחול של אפליקציה
קובץ services-config.yaml לדוגמה:
version: v1beta1 env: - name: KEY1 value: VALUE1 - name: KEY2 value: VALUE2 applications: - name: nginx type: forking envfile: /path/to/file.txt env: - name: KEY3 value: VALUE3 start: - cmd: /usr/sbin/nginx -g 'daemon on; master_process on;' pidfile: /run/nginx.pid - name: ssh@ type: simple start: - cmd: /usr/sbin/sshd -i $SSHD_OPTS ignore_errors: true runtime_directories: mode: "0755" paths: - /run/sshd preserve: true - name: suitecrm type: exec start: - cmd: /etc/init.d/suitecrm start status: cmd: /etc/init.d/suitecrm status - name: phpsessionclean type: oneshot start: - cmd: /usr/lib/php/sessionclean timers: - name: phpsessionclean.timer on_calendar: - cron: 09,39 * * * * - name: mariadb type: notify prestart: - cmd: /usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld - cmd: /bin/sh -c "systemctl unset-environment _WSREP_START_POSITION" - cmd: /bin/sh -c "[ ! -e /usr/bin/galera_recovery ] && VAR= || VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ] && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1" start: - cmd: /usr/sbin/mysqld $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION poststart: - cmd: /bin/sh -c "systemctl unset-environment _WSREP_START_POSITION" - cmd: /etc/mysql/debian-start user: mysql group: mysql
בקובץ הזה:
env: מציין משתני סביבה ברמה הגלובלית או ברמת האפליקציה. אם מציינים את אותו משתנה סביבה ברמה הגלובלית וברמת האפליקציה, משתנה הסביבה ברמת האפליקציה מקבל קדימות.כדי להגדיר משתני סביבה ברמה הגלובלית, משתמשים ב-
envכדי לציין צמדname/value. השמות יכולים להכיל אותיות ASCII, ספרות וקו תחתון. השמות לא יכולים להתחיל בספרה.כדי להגדיר משתני סביבה ברמת האפליקציה, משתמשים ב-
envכדי לציין צמדname/value. לחלופין, אפשר להשתמש ב-envfileכדי לציין את הנתיב לקובץ טקסט שמכיל שורות בפורמט:# Comments allowed KEY=VALUE
אם קובץ הטקסט מכיל הגדרה של משתנה סביבה שזהה להגדרה שצוינה על ידי
env, ההגדרה שצוינה על ידיenvמקבלת עדיפות.
applications: מציין את רשימת האפליקציות שיופעלו כשפורסים את הקונטיינר, ומגדיר את מאפייני האתחול של האפליקציה.
name: מציין את שם האפליקציה.
typeמציין את סוג האפליקציה, כאחת מהאפשרויות הבאות:
forking: מריצים את הקובץ שצוין על ידיstartבלי פיצול. קובץ ההפעלה של השירות אמור להתפצל. מומלץ להגדיר גם אתpidfile.
exec: יצירת Fork כדי להפעיל את השירות. השירות נחשב כמופעל אחרי שמתבצעת קריאה ל-execבקובץ ההפעלה.
simple– זהה ל-exec.simpleשירות מתנהג באופן שונה מההגדרה שלוsystemdכי הוא מחכה ל-forkול-execבמקום ל-fork.
notify: זהה ל-exec, אלא שב-systemdמשתנה הסביבהNOTIFY_SOCKETלא מוגדר, ולכן קריאות ל-sd_notify systemdלא פועלות.
oneshot: השירות נחשב כמופעל אחרי שקוראים ל-execבקובץ ההפעלה. הסטטוס הואerrorאם השירות יוצא עם קוד שגיאה שלא שווה ל-0.
פקודות
prestart,start,poststartו-statusלשירות.כדי להפעיל שירות, Migrate to Containers מריץ את הפקודות
prestart(אם יש כאלה), ואז את הפקודהstart, ולבסוף את הפקודותpoststart(אם יש כאלה). אם פקודה נכשלת ולא הגדרתם את הפקודה להשתמש ב-ignore_errors, השירות ייעצר ותוצג הודעת שגיאה בסטטוס של השירות.הפקודות שמשמשות לביצוע פעולות ספציפיות באפליקציה הן מהצורה:
command-type: cmd: command shell: /bin/sh ignore_errors: false ignore_environment_variables: false
כאשר:
command-type: מציין את סוג הפקודה כאחת מהאפשרויות הבאות:
prestart,start,poststartאוstatus.ב-
start, אפשר להשתמש בפקודה אחת, אלא אםtypeהואoneshot.אם
type=forkingאוtype=oneshot, הפקודותpoststartמופעלות אחרי שהפקודהstartמתפצלת. אחרת, הן מופעלות מיד אחרי הפעלת הפקודהstart.command: מציין את הפקודה להרצה כדי לבצע את הפעולה.
shell(אופציונלי): כברירת מחדל, כל הפקודות מבוצעות במעטפת/bin/sh. אפשר גם להגדיר אתshellלערך/bin/bash.
ignore_errors(אופציונלי): אם מצייניםtrue, קוד יציאה מהפקודה שנחשב בדרך כלל ככשל מתועד, אבל הפקודה נחשבת כהצלחה. ערך ברירת המחדל הואfalse.כברירת מחדל, Migrate to Containers מגדיר את
ignore_errorsל-trueלכל קובץ הפעלהsystemdשכולל את הקידומת '-'.
ignore_environment_variables(אופציונלי): אםtrue, לא מוחלפת החלפת משתנה סביבה. ערך ברירת המחדל הואfalse.כברירת מחדל, הכלי Migrate to Containers מגדיר את
ignore_environment_variablesל-trueלכל קובץ הפעלהsystemdשכולל את הקידומת ':'.
pidfile: מציין את קובץ ה-pid שמכיל את מזהה התהליך של השירות, שמשמש לבדיקה אם התהליך עדיין פועל.
chdir: מציין את ספריית העבודה של התהליך שהופעל.
user: מציין את שם המשתמש שדרכו מתחיל התהליך החדש.
group: מציין את שם הקבוצה שמתחתיה מתחיל התהליך החדש.
timers: מציין את רשימת הטיימרים של האפליקציה. האפליקציה תופעל בכל פעם שאחד מהטיימרים שצוינו יסתיים.version: v1beta1 env: [] Applications: - name: service_name type: service_type start: - cmd: service_exec_command timers: - name: timer_name on_calendar: - cron: realtime_time on_startup: - duration: monotonic_time on_service_start: - duration: monotonic_time on_service_stop: - duration: monotonic_time
name: מציין את השם של הטיימר.on_calendar: מציין את רשימת האירועים ביומן של הטיימר.
cron: שעה שצוינה בפורמט cron. לדוגמה:cron: 0 0 * * * cron: @daily
on_startup: ציון רשימה של משכי זמן (ביחס למועד הפריסה של הקונטיינר).-
duration: זמן שצוין בפורמט משך. לדוגמה:
duration: 30m duration: 1sec-
on_service_start: מציין רשימה של משכי זמן, ביחס למועד שבו הסטטוס של האפליקציה משתנה ל'פעיל'.-
duration: זמן שצוין בפורמט משך.
-
on_service_stop: מציין רשימה של משכי זמן, ביחס למועד שבו הסטטוס של האפליקציה משתנה ל'לא פעיל'.-
duration: זמן שצוין בפורמט משך.
-
משתמשים במאפיינים הבאים כדי לציין
pathsלספריות שנוצרו לפני הפעלת השירות:
runtime_directories: מציין את רשימתpathsלספריות שנוצרו ב-/run/.
state_directories: מציין את רשימתpathsלספריות שנוצרו ב-/var/lib/.
cache_directories: מציין את רשימתpathsלספריות שנוצרו ב-/var/cache/.
logs_directories: מציין את רשימתpathsלספריות שנוצרו ב-/var/log/.
configuration_directories: מציין את רשימתpathsלספריות שנוצרו ב-/etc/.
כל אחד מהמאפיינים האלה מקבל את האפשרויות הבאות:
-
mode: מציין את מצב הקובץ. ברירת המחדל היא 0755, שמתאימה לגישת קריאה והרצה לכולם, ולגישת כתיבה לבעלים. -
preserve: אםfalseהמדריך מנוקה כשהשירות מופסק. ערך ברירת המחדל הואtrue.
הוספה או הסרה של שירות לקובץ services.yaml
אפשר להוסיף או להסיר שירות מקובץ services.yaml על ידי עריכה ידנית שלו. בכל פעם שמוסיפים שירות חדש, צריך למלא את השדות הבאים:
nametypestart
מידע נוסף על השדות שחובה למלא ועל השדות האופציונליים של שירות מסוים מופיע בהגדרה של services.yaml למעלה.
הוספת שירות
כדי להוסיף שירות לקובץ services.yaml:
פותחים את קובץ
services.yamlבכלי לעריכת טקסט כדי לבצע בו שינויים.ב-
services.yaml, עוברים למאפייןapplications:version: v1beta1 env: - name: KEY1 ... applications:מוסיפים את השירות הרצוי בשורה שמתחת למאפיין
applications, מתחילים בשדהnameואז מוסיפים את שאר השדות הנדרשים והאופציונליים שמתאימים לאפליקציה:version: v1beta1 env: - name: KEY1 ... applications: - name: type: start: - cmd: ...אם בקובץ
services.yamlכבר יש הגדרות של שירותים תחת המאפייןapplications, אפשר להוסיף שירות חדש החל מהשדהnameבשורה שמתחת לרשומה האחרונה של השירות הקודם:version: v1beta1 env: - name: KEY1 ... applications: - name: type: start: - name: type: start: ...שומרים את קובץ ה-
services.yaml.
הסרת שירות
כדי להסיר שירות מקובץ services.yaml:
פותחים את קובץ
services.yamlבכלי לעריכת טקסט כדי לבצע בו שינויים.ב-
services.yaml, עוברים למאפייןapplications:version: v1beta1 env: - name: KEY1 ... applications: ...מסירים את השירות הרצוי, מתחילים בשדה
nameואז ממשיכים לשאר השדות שחובה למלא ולשדות האופציונליים שרלוונטיים לאפליקציה. לדוגמה:לפני שהשירות הוסר:
version: v1beta1 env: - name: KEY1 ... applications: - name: type: start: - cmd: - name: ...אחרי שהשירות יוסר:
version: v1beta1 env: - name: KEY1 ... applications: - name: ...שומרים את קובץ ה-
services.yaml.