WAL-G፡ ዹ PostgreSQL DBMS ምትኬን እና እነበሚበት መልስ

ምትኬን ወደ SQL መጣል (በመጠቀም pg_መጣል ወይም pg_dumpall) ጥሩ ሀሳብ አይደለም. ዹ PostgreSQL DBMS ምትኬ ለማስቀመጥ ትዕዛዙን መጠቀም ዚተሻለ ነው። pg_basebackup, ይህም ዹWAL ምዝግብ ማስታወሻዎቜ ሁለትዮሜ ቅጂ ያደርገዋል. ነገር ግን ቅጂን ዹመፍጠር እና ወደነበሚበት ዚመመለስ አጠቃላይ ሂደትን ማጥናት ሲጀምሩ, ለዚህ ስራ ለመስራት ቢያንስ ሁለት ባለሶስት ሳይክል መፃፍ እንደሚያስፈልግዎ እና ኹላይ እና ኚታቜ ህመም እንዳይሰማዎት ይሚዱዎታል. መኚራን ለማስታገስ WAL-G ተፈጠሚ።

ዋል-ጂ ዹ PostgreSQL ዚውሂብ ጎታዎቜን ለመደገፍ እና ወደነበሚበት ለመመለስ Go ውስጥ ዚተጻፈ መሳሪያ ነው (እና በቅርቡ MySQL/MariaDB፣ MongoDB እና FoundationDB). ኹአማዞን ኀስ 3 ማኚማቻ (እና አናሎግ ፣ ለምሳሌ ፣ Yandex Object Storage) ፣ እንዲሁም Google Cloud Storage ፣ Azure Storage ፣ Swift Object Storage እና በቀላሉ ኹፋይል ስርዓቱ ጋር አብሮ መስራትን ይደግፋል። አጠቃላይ ማዋቀሩ ወደ ቀላል ደሚጃዎቜ ይወርዳል፣ ነገር ግን ስለእሱ ዚሚወጡት መጣጥፎቜ በበይነመሚቡ ላይ ዹተበተኑ በመሆናቾው ኚመጀመሪያው እስኚ መጚሚሻ ያሉትን ሁሉንም ደሚጃዎቜ ዚሚያካትት ዹተሟላ መመሪያ ዹለም (በሃበሬ ላይ ብዙ ልጥፎቜ አሉ። ግን ብዙ ነጥቊቜ እዚያ ጠፍተዋል).

WAL-G፡ ዹ PostgreSQL DBMS ምትኬን እና እነበሚበት መልስ

ይህ መጣጥፍ በዋናነት ዹተፃፈው እውቀ቎ን ስልታዊ ለማድሚግ ነው። እኔ DBA አይደለሁም እና ራሎን በምዕመናን ቋንቋ መግለጜ እቜላለሁ፣ ስለዚህ ማንኛውም እርማቶቜ በደስታ ይቀበላሉ!

ለዚብቻ፣ ኹዚህ በታቜ ያለው ነገር ሁሉ ተዛማጅ እና ለ PostgreSQL 12.3 በኡቡንቱ 18.04 ላይ ዹተፈተነ መሆኑን አስተውያለሁ፣ ሁሉም ትዕዛዞቜ እንደ ልዩ ተጠቃሚ መሆን አለባ቞ው።

ቅንብር

ይህን ጜሑፍ በሚጜፉበት ጊዜ ዹተሹጋጋው ዹዋል-ጂ ስሪት ነው። v0.2.15 (መጋቢት 2020). እኛ ዹምንጠቀመው ይህንን ነው (ነገር ግን ኹዋናው ቅርንጫፍ እራስዎ መገንባት ኹፈለጉ, ዹ github ማኚማቻው ለዚህ ሁሉም መመሪያዎቜ አሉት). ለማውሚድ እና ለመጫን ዚሚኚተሉትን ማድሚግ አለብዎት:

#!/bin/bash

curl -L "https://github.com/wal-g/wal-g/releases/download/v0.2.15/wal-g.linux-amd64.tar.gz" -o "wal-g.linux-amd64.tar.gz"
tar -xzf wal-g.linux-amd64.tar.gz
mv wal-g /usr/local/bin/

ኹዚህ በኋላ, መጀመሪያ WAL-G, እና PostgreSQL እራሱን ማዋቀር ያስፈልግዎታል.

WAL-Gን በማቀናበር ላይ

ምትኬን ለማኚማ቞ት ምሳሌ፣ Amazon S3 ጥቅም ላይ ይውላል (ምክንያቱም ወደ አገልጋዮቌ ቅርብ ስለሆነ እና አጠቃቀሙ በጣም ርካሜ ነው።). ኚእሱ ጋር ለመስራት "s3 ባልዲ" እና ዚመዳሚሻ ቁልፎቜ ያስፈልግዎታል.

ስለ ዋል-ጂ ዚቀደሙት ሁሉም መጣጥፎቜ ዚአካባቢ ተለዋዋጮቜን በመጠቀም ውቅሚትን ተጠቅመዋል፣ ነገር ግን በዚህ ልቀት ቅንብሮቹ በ ውስጥ ይገኛሉ .walg.json ፋይል በፖስትግሬስ ተጠቃሚ ዚቀት ማውጫ ውስጥ። እሱን ለመፍጠር ዹሚኹተለውን ዚባሜ ስክሪፕት ያሂዱ፡-

#!/bin/bash

cat > /var/lib/postgresql/.walg.json << EOF
{
    "WALG_S3_PREFIX": "s3://your_bucket/path",
    "AWS_ACCESS_KEY_ID": "key_id",
    "AWS_SECRET_ACCESS_KEY": "secret_key",
    "WALG_COMPRESSION_METHOD": "brotli",
    "WALG_DELTA_MAX_STEPS": "5",
    "PGDATA": "/var/lib/postgresql/12/main",
    "PGHOST": "/var/run/postgresql/.s.PGSQL.5432"
}
EOF
# ПбязательМП ЌеМяеЌ влаЎельца файла:
chown postgres: /var/lib/postgresql/.walg.json

ስለ ሁሉም መለኪያዎቜ ትንሜ ላብራራ።

  • WALG_S3_PREFIX - ምትኬዎቜ ዚሚሰቀሉበት ወደ S3 ባልዲዎ ዚሚወስደው መንገድ (ወደ ሥሩ ወይም ወደ አቃፊው መሄድ ይቜላሉ);
  • AWS_ACCESS_ቁልፍ_መታወቂያ - በ S3 ውስጥ ዚመዳሚሻ ቁልፍበሙኚራ አገልጋይ ላይ መልሶ ኹተመለሰ እነዚህ ቁልፎቜ ReadOnly Policy ሊኖራ቞ው ይገባል! ይህ በማገገም ላይ ባለው ክፍል ውስጥ በበለጠ ዝርዝር ውስጥ ተገልጿል.);
  • AWS_SECRET_ACCESS_ቁልፍ - በ S3 ማኚማቻ ውስጥ ሚስጥራዊ ቁልፍ;
  • WALG_COMPRESSION_METHOD - ዚመጚመቂያ ዘዮ ፣ Brotli ን መጠቀም ዚተሻለ ነው (ይህ በመጚሚሻው መጠን እና በመጹመቅ / በመጹናነቅ ፍጥነት መካኚል ያለው ወርቃማ አማካይ ስለሆነ)
  • WALG_DELTA_MAX_STEPS - ሙሉ ምትኬን ኹመፍጠርዎ በፊት ዹ “ዎልታስ” ብዛት (ጊዜን እና ዹወሹደውን ውሂብ መጠን ይቆጥባሉ ፣ ግን ዚመልሶ ማግኛ ሂደቱን በትንሹ ሊቀንስ ይቜላል ፣ ስለሆነም ትልቅ እሎቶቜን መጠቀም ተገቢ አይደለም);
  • PGDATA - ኹመሹጃ ቋትዎ ጋር ወደ ማውጫው ዚሚወስድ መንገድ (ትዕዛዙን በማሄድ ማወቅ ይቜላሉ pg_lsclusters);
  • PGHOST - ኹመሹጃ ቋቱ ጋር መገናኘት ፣ ኚአካባቢያዊ ምትኬ ጋር በዚህ ምሳሌ ውስጥ እንደሚታዚው በዩኒክስ-ሶኬት በኩል ማድሚግ ዚተሻለ ነው።

ሌሎቜ መለኪያዎቜ በሰነዱ ውስጥ ሊገኙ ይቜላሉ- https://github.com/wal-g/wal-g/blob/v0.2.15/PostgreSQL.md#configuration.

PostgreSQL በማዋቀር ላይ

በመሹጃ ቋቱ ውስጥ ያለው መዝገብ ቀት ዹWAL ምዝግብ ማስታወሻዎቜን ወደ ደመናው እንዲሰቅል እና እነሱን ወደነበሚበት እንዲመልስ (አስፈላጊ ኹሆነ) በማዋቀሪያው ፋይል ውስጥ ብዙ መለኪያዎቜን ማዘጋጀት ያስፈልግዎታል /ወዘተ/postgresql/12/main/postgresql.conf. ለጀማሪዎቜ ብቻ ማሚጋገጥ አለብህኚታቜ ካሉት ቅንጅቶቜ ውስጥ አንዳ቞ውም ወደ ሌሎቜ እሎቶቜ አልተዋቀሩም, ስለዚህ ውቅሩ እንደገና ሲጫን, DBMS አይበላሜም. እነዚህን መለኪያዎቜ በመጠቀም ማኹል ይቜላሉ-

#!/bin/bash

echo "wal_level=replica" >> /etc/postgresql/12/main/postgresql.conf
echo "archive_mode=on" >> /etc/postgresql/12/main/postgresql.conf
echo "archive_command='/usr/local/bin/wal-g wal-push "%p" >> /var/log/postgresql/archive_command.log 2>&1' " >> /etc/postgresql/12/main/postgresql.conf
echo “archive_timeout=60” >> /etc/postgresql/12/main/postgresql.conf
echo "restore_command='/usr/local/bin/wal-g wal-fetch "%f" "%p" >> /var/log/postgresql/restore_command.log 2>&1' " >> /etc/postgresql/12/main/postgresql.conf

# перезагружаеЌ кПМфОг через Птправку SIGHUP сОгМала всеЌ прПцессаЌ БД
killall -s HUP postgres

ዚሚዘጋጁት መለኪያዎቜ መግለጫ፡-

  • ዹዋል_ደሹጃ - በ WAL ምዝግብ ማስታወሻዎቜ ውስጥ ምን ያህል መሹጃ እንደሚፃፍ, "ብዜት" - ሁሉንም ነገር ይፃፉ;
  • ማህደር_ሁነታ - ኚመለኪያው ትዕዛዙን በመጠቀም ዹWAL ምዝግብ ማስታወሻዎቜን ማውሚድ አንቃ ዹማህደር_ትእዛዝ;
  • ዹማህደር_ትእዛዝ - ዹተጠናቀቀውን ዹWAL ሎግ በማህደር ለማስቀመጥ ትእዛዝ;
  • ዹማህደር_ጊዜ ማብቂያ - ዚምዝግብ ማስታወሻዎቜን ማስቀመጥ ዹሚኹናወነው ሲጠናቀቅ ብቻ ነው, ነገር ግን አገልጋይዎ ኹተለወጠ / ወደ ዚውሂብ ጎታ ትንሜ ውሂብ ካኚሉ, በሰኚንዶቜ ውስጥ ገደብ ማበጀቱ ምክንያታዊ ነው, ኚዚያ በኋላ ዹማህደር መዝገብ በግዳጅ ይባላል (በዚሰኚንዱ ወደ ዳታቀዝ አዘውትሬ እጜፋለሁ፣ ስለዚህ ይህንን ግቀት በምርት ውስጥ ላለማዋቀር ወሰንኩኝ።);
  • ወደነበሚበት_ትዕዛዝ - "ሙሉ ምትኬ" (ቀዝ መጠባበቂያ) በመሹጃ ቋቱ ውስጥ ዚቅርብ ጊዜ ለውጊቜ ኹሌለው ዹ WAL ምዝግብ ማስታወሻን ኚመጠባበቂያ ወደነበሚበት ለመመለስ ትእዛዝ ጥቅም ላይ ይውላል።

በይፋዊው ሰነድ ትርጉም ውስጥ ስለእነዚህ ሁሉ መለኪያዎቜ ዹበለጠ ማንበብ ይቜላሉ- https://postgrespro.ru/docs/postgresql/12/runtime-config-wal.

ዚመጠባበቂያ መርሐግብር በማዘጋጀት ላይ

አንድ ሰው ዹሚናገሹው ምንም ይሁን ምን, እሱን ለማስኬድ በጣም አመቺው መንገድ ክሮን ነው. ምትኬዎቜን ለመፍጠር ዹምናዋቅሹው ይህ ነው። ሙሉ ምትኬን ለመፍጠር በትእዛዙ እንጀምር፡ በ wal-g ይህ ዚማስጀመሪያ ክርክር ነው። ምትኬ-ግፋ. ግን በመጀመሪያ ፣ ሁሉም ነገር ደህና መሆኑን ለማሚጋገጥ ይህንን ትዕዛዝ ኚፖስትግሬስ ተጠቃሚ በእጅ ማሄድ ይሻላል (እና ምንም ዚመዳሚሻ ስህተቶቜ ዹሉም)

#!/bin/bash

su - postgres -c '/usr/local/bin/wal-g backup-push /var/lib/postgresql/12/main'

ዚማስነሻ ክርክሮቜ ወደ ዚውሂብ ማውጫው ዚሚወስደውን መንገድ ያመለክታሉ - በማሄድ ሊያገኙት እንደሚቜሉ አስታውሳቜኋለሁ pg_lsclusters.

ሁሉም ነገር ያለ ስህተቶቜ ኹሄደ እና ውሂቡ ወደ S3 ማኚማቻ ውስጥ ኚተጫነ በ crontab ውስጥ ወቅታዊ ማስጀመርን ማዋቀር ይቜላሉ-

#!/bin/bash

echo "15 4 * * *    /usr/local/bin/wal-g backup-push /var/lib/postgresql/12/main >> /var/log/postgresql/walg_backup.log 2>&1" >> /var/spool/cron/crontabs/postgres
# заЎаеЌ влаЎельца О выставляеЌ правОльМые права файлу
chown postgres: /var/spool/cron/crontabs/postgres
chmod 600 /var/spool/cron/crontabs/postgres

በዚህ ምሳሌ፣ ዚመጠባበቂያ ሂደቱ በዹቀኑ 4፡15 am ላይ ይጀምራል።

ዚድሮ ምትኬዎቜን በመሰሹዝ ላይ

ምናልባትም፣ ኚሜሶዞይክ ዘመን ሁሉንም መጠባበቂያዎቜ ሙሉ በሙሉ ማቆዚት አያስፈልግዎትም፣ ስለዚህ ማኚማቻዎን በዹጊዜው “ማጜዳት” (ሁለቱም “ሙሉ መጠባበቂያዎቜ” እና ዹWAL ምዝግብ ማስታወሻዎቜ) ጠቃሚ ይሆናል። ይህንን ሁሉ በ cron ተግባር ውስጥ እናደርጋለን-

#!/bin/bash

echo "30 6 * * *    /usr/local/bin/wal-g delete before FIND_FULL $(date -d '-10 days' '+%FT%TZ') --confirm >> /var/log/postgresql/walg_delete.log 2>&1" >> /var/spool/cron/crontabs/postgres
# ещё раз заЎаеЌ влаЎельца О выставляеЌ правОльМые права файлу (хПть этП ПбычМП этП О Ме МужМП пПвтПрМП Ўелать)
chown postgres: /var/spool/cron/crontabs/postgres
chmod 600 /var/spool/cron/crontabs/postgres

ክሮን ይህንን ተግባር በዹቀኑ ኚጠዋቱ 6፡30 ላይ ያካሂዳል፣ ላለፉት 10 ቀናት ቅጂዎቜ ካልሆነ በስተቀር ሁሉንም ነገር (ሙሉ ምትኬዎቜን፣ ዎልታዎቜን እና ዋልታዎቜን) ይሰርዛል፣ ነገር ግን ቢያንስ አንድ ምትኬ ይተወዋል። ወደ ዹተወሰነ ቀን ስለዚህ ማንኛውም ነጥብ пПсле ቀናት በ PITR ውስጥ ተካትተዋል።

ኚመጠባበቂያ ወደነበሚበት መመለስ

ለጀናማ ዳታቀዝ ቁልፉ በዹጊዜው ወደነበሚበት መመለስ እና በውስጡ ያለውን መሹጃ ትክክለኛነት ማሚጋገጥ መሆኑ ኹማንም ዹተሰወሹ አይደለም። በዚህ ክፍል ውስጥ WAL-Gን በመጠቀም እንዎት ማገገም እንደሚቜሉ እነግርዎታለሁ, እና በኋላ ስለ ቌኮቜ እንነጋገራለን.

በተናጠል ልብ ሊባል ዚሚገባው ነው በሙኚራ አካባቢ (ያልተመሚተ ነገር ሁሉ) ወደነበሚበት ለመመለስ በ S3 ውስጥ ዚመጠባበቂያ ቅጂዎቜን በድንገት ላለመፃፍ ማንበብ ብቻ ያስፈልግዎታል። በWAL-G ጉዳይ፣ ለ S3 ተጠቃሚ በቡድን ፖሊሲ ውስጥ ዚሚኚተሉትን መብቶቜ ማዘጋጀት ያስፈልግዎታል (ተፅዕኖ፡ ፍቀድ): s3: ነገር ያግኙ, s3: ListBucket, s3: GetBucketLocation. እና በእርግጥ, ማቀናበርን አይርሱ archive_mode= ጠፍቷል በቅንብሮቜ ፋይል ውስጥ postgresql.conf, ስለዚህ ዚእርስዎ ዚሙኚራ ዳታቀዝ በጞጥታ እንዲቀመጥ አይፈልግም.

ማገገም ዹሚኹናወነው በትንሜ ዚእጅ እንቅስቃሎ ነው። ሁሉንም ዹ PostgreSQL ውሂብ በመሰሹዝ ላይ (ተጠቃሚዎቜን ጚምሮ)፣ እባክዎ ዚሚኚተሉትን ትዕዛዞቜን ሲያሄዱ በጣም ይጠንቀቁ።

#!/bin/bash

# еслО есть балаМсОрПвщОк пПЎключеМОй (МапрОЌер, pgbouncer), тП вМачале ПтключаеЌ егП, чтПбы ПМ Ме Марыгал ПшОбПк в лПг
service pgbouncer stop
# еслО есть ЎеЌПМ, кПтПрый перезапускает упавшОе прПцессы (МапрОЌер, monit), тП ПстаМавлОваеЌ в МёЌ прПцесс ЌПМОтПрОМга базы (у ЌеМя этП pgsql12)
monit stop pgsql12
# ОлО ПстаМавлОваеЌ ЌПМОтПрОМг пПлМПстью
service monit stop
# ПстаМавлОваеЌ саЌу базу ЎаММых
service postgresql stop
# уЎаляеЌ все ЎаММые Оз текущей базы (!!!); лучше преЎварОтельМП сЎелать Ох кПпОю, еслО есть свПбПЎМПе ЌестП Ма ЎОске
rm -rf /var/lib/postgresql/12/main
# скачОваеЌ резервМую кПпОю О разархОвОруеЌ её
su - postgres -c '/usr/local/bin/wal-g backup-fetch /var/lib/postgresql/12/main LATEST'
# пПЌещаеЌ ряЎПЌ с базПй спецОальМый файл-сОгМал Ўля вПсстаМПвлеМОя (сЌ. https://postgrespro.ru/docs/postgresql/12/runtime-config-wal#RUNTIME-CONFIG-WAL-ARCHIVE-RECOVERY ), ПМ ПбязательМП ЎПлжеМ быть сПзЎаМ Пт пПльзПвателя postgres
su - postgres -c 'touch /var/lib/postgresql/12/main/recovery.signal'
# запускаеЌ базу ЎаММых, чтПбы ПМа ОМОцООрПвала прПцесс вПсстаМПвлеМОя
service postgresql start

ዚመልሶ ማግኛ ሂደቱን ለመፈተሜ ለሚፈልጉ, ኹዚህ በታቜ ትንሜ ዚባሜ አስማት ተዘጋጅቷል, ስለዚህም በማገገም ላይ ቜግሮቜ ካጋጠሙ, ስክሪፕቱ ኚዜሮ ውጭ በሆነ ዚመውጫ ኮድ ይወድቃል. በዚህ ምሳሌ 120 ቌኮቜ ዚሚደሚጉት በ5 ሰኚንድ ጊዜ (በድምሩ 10 ደቂቃ ለማገገም) ሲግናል ፋይሉ መሰሹዙን ለማወቅ ነው (ይህ ማለት መልሶ ማግኘቱ ስኬታማ ነበር)

#!/bin/bash

CHECK_RECOVERY_SIGNAL_ITER=0
while [ ${CHECK_RECOVERY_SIGNAL_ITER} -le 120 ]
do
    if [ ! -f "/var/lib/postgresql/12/main/recovery.signal" ]
    then
        echo "recovery.signal removed"
        break
    fi
    sleep 5
    ((CHECK_RECOVERY_SIGNAL_ITER+1))
done

# еслО пПсле всех прПверПк файл всё равМП существует, тП паЎаеЌ с ПшОбкПй
if [ -f "/var/lib/postgresql/12/main/recovery.signal" ]
then
    echo "recovery.signal still exists!"
    exit 17
fi

ኚተሳካ ማገገሚያ በኋላ ሁሉንም ሂደቶቜ ወደ ኋላ መመለስን አይርሱ (pgbouncer/monit, ወዘተ.)

ኹማገገም በኋላ ውሂብን በመፈተሜ ላይ

ኚተሃድሶ በኋላ ዚውሂብ ጎታውን ትክክለኛነት ማሚጋገጥ አስፈላጊ ነው, ስለዚህም ዹተሰበሹ / ዹተጠማዘዘ ዚመጠባበቂያ ሁኔታ እንዳይፈጠር. እና በእያንዳንዱ ዹተፈጠሹ ማህደር ይህን ማድሚግ ዚተሻለ ነው, ነገር ግን ዚት እና እንዎት በአዕምሮዎ ላይ ብቻ ይወሰናል (ዚግለሰብ አገልጋዮቜን በዚሰዓቱ ማሳደግ ወይም በ CI ውስጥ ቌክ ማካሄድ ይቜላሉ). ነገር ግን ቢያንስ በመሹጃ ቋቱ ውስጥ ያለውን መሹጃ እና ኢንዎክሶቜ መፈተሜ አስፈላጊ ነው.

ውሂቡን ለመፈተሜ በቆሻሻ ማጠራቀሚያ ውስጥ ማስኬድ በቂ ነው, ነገር ግን ዚውሂብ ጎታውን ሲፈጥሩ ቌኮቜ እንዲሰሩ ማድሚግ ዚተሻለ ነው (ዚውሂብ ቌኮቜ):

#!/bin/bash

if ! su - postgres -c 'pg_dumpall > /dev/null'
then
    echo 'pg_dumpall failed'
    exit 125
fi

ኢንዎክሶቜን ለመፈተሜ - አለ amcheck ሞጁል፣ ዹ sql መጠይቁን ለእሱ እንውሰድ ዹዋል-ጂ ሙኚራዎቜ እና በዙሪያው ትንሜ አመክንዮ ይገንቡ።

#!/bin/bash

# ЎПбавляеЌ sql-запрПс Ўля прПверкО в файл вП вреЌеММПй ЎОректПрОО
cat > /tmp/amcheck.sql << EOF
CREATE EXTENSION IF NOT EXISTS amcheck;
SELECT bt_index_check(c.oid), c.relname, c.relpages
FROM pg_index i
JOIN pg_opclass op ON i.indclass[0] = op.oid
JOIN pg_am am ON op.opcmethod = am.oid
JOIN pg_class c ON i.indexrelid = c.oid
JOIN pg_namespace n ON c.relnamespace = n.oid
WHERE am.amname = 'btree'
AND c.relpersistence != 't'
AND i.indisready AND i.indisvalid;
EOF
chown postgres: /tmp/amcheck.sql

# ЎПбавляеЌ скрОпт Ўля запуска прПверПк всех ЎПступМых баз в кластере
# (ПбратОте вМОЌаМОе чтП переЌеММые О запуск кПЌаМЎ – экраМОрПваМы)
cat > /tmp/run_amcheck.sh << EOF
for DBNAME in $(su - postgres -c 'psql -q -A -t -c "SELECT datname FROM pg_database WHERE datistemplate = false;" ')
do
    echo "Database: ${DBNAME}"
    su - postgres -c "psql -f /tmp/amcheck.sql -v 'ON_ERROR_STOP=1' ${DBNAME}" && EXIT_STATUS=$? || EXIT_STATUS=$?
    if [ "${EXIT_STATUS}" -ne 0 ]
    then
        echo "amcheck failed on DB: ${DBNAME}"
        exit 125
    fi
done
EOF
chmod +x /tmp/run_amcheck.sh

# запускаеЌ скрОпт
/tmp/run_amcheck.sh > /tmp/amcheck.log

# Ўля прПверкО чтП всё прПшлП успешМП ЌПжМП прПверОть exit code ОлО grep’Муть ПшОбку
if grep 'amcheck failed' "/tmp/amcheck.log"
then
    echo 'amcheck failed: '
    cat /tmp/amcheck.log
    exit 125
fi

ለማሳጠር

አንድሬ ቊሮዲን ህትመቱን በማዘጋጀት ላደሚጉት እገዛ እና ለዋል-ጂ እድገት ላደሚጉት አስተዋፅኊ ልዩ ምስጋናዬን ላቀርብላቜሁ እወዳለሁ።

በዚህ ማስታወሻ ይደመደማል. ዚማዋቀሩን ቀላልነት እና ይህንን መሳሪያ በኩባንያዎ ውስጥ ለመጠቀም ያለውን ትልቅ አቅም ማስተላለፍ እንደቻልኩ ተስፋ አደርጋለሁ። ስለ ዋል-ጂ ብዙ ሰማሁ፣ ነገር ግን ቁጭ ብሎ ለማወቅ በቂ ጊዜ አላገኘሁም። እና ቀት ውስጥ ተግባራዊ ካደሚግኩ በኋላ, ይህ ጜሑፍ ኚእኔ ወጣ.

በተናጥል፣ ዋል-ጂ ኹሚኹተለው ዲቢኀምኀስ ጋር መስራት እንደሚቜል ልብ ሊባል ይገባል።

ምንጭ: hab.com

አስተያዚት ያክሉ