تاريخ إنشاء سحابة منزلية. الجزء 3. إنشاء سحابة شخصية - تثبيت وتكوين Nextcloud

في طريقنا لإنشاء خدمة السحابة الخاصة بنا ، بينما اعتدنا على نظام دبيان وأنشأنا خادم ويب . حان الوقت الآن للخطوة الأخيرة - إنشاء وتكوين سحابة شخصية بناءً على خادم Nextcloud.





جدول المحتويات


الجزء 1. إعداد بيئة دبيان الخاصة بك للاستخدام اليومي
الجزء 2. إنشاء خادم - إعداد LAMP في دبيان
الجزء 3. إنشاء سحابة شخصية - تثبيت وتكوين Nextcloud
الجزء 4. تحديث 2018 - Debian 9 و Nextcloud 13
الجزء 5. تحديث 2019 - PHP 7.2 و MariaDB 10.4 و Nextcloud 17



التنقل السريع في الفصل


مقدمة
تحضير خادم لتثبيت Nextcloud
قم بتثبيت Nextcloud
تنظيم تخزين Nextcloud
قم بتكوين Nextcloud Virtual Machine Access من شبكة المنطقة المحلية
إعداد Nextcloud
الضبط الدقيق التالي لـ Nextcloud
حماية Nextcloud
مزامنة سحابة الهاتف الذكي
مزامنة سحابة الكمبيوتر الشخصي
خاتمة



مقدمة


لذلك وصلنا إلى نفس الشيء الذي بدأ فيه كل شيء ولم نتقدم إليه بسرعة. سيصف هذا الجزء التثبيت وبعض النقاط في تكوين خادم Nextcloud في الجهاز الظاهري VMWare ، بالإضافة إلى القليل من الخبرة في العمل معه في شكل مزامنة محتويات زوج من الهواتف الذكية والمجلدات المستندة إلى Windows على كمبيوتر سطح المكتب. تشير تعليمات التثبيت التالية لـ Nextcloud إلى نشر الخدمة على خادم تم إنشاؤه وفقًا للتعليمات الواردة في الجزء السابق من قصتي.

في البداية ، كان من المخطط أن يكون هذا الفصل صغيرًا ، لأنني أردت أن أقصر نفسي فقط على وصف تثبيت وتكوين Nextcloud ، وأنهي في الأساس هذه القصة حول "مجرد دخول Linux لمهمة محددة". ولكن ، معتقدًا أن هذا قد يبدو مثيرًا للاهتمام لشخص ما ، ثم قرر إظهار كيفية حل مشكلة مزامنة مجلدات جهاز الكمبيوتر في المنزل ، لذا فإن هذا الفصل الأخير يتدفق بسلاسة من التعليمات الواضحة حول ما يجب القيام به في البرمجة وكيفية القيام به. يشرح هذا بعض "الخل" في هذا الجزء - يبدأ بالعمل والإعدادات في Linux ، ويتدفق إلى مستوى الشبكة وإعدادات البرامج الافتراضية ، وينتهي بعكازات التخطيط في Windows. من ناحية أخرى ، هذه السلسلة من المقالات تحمل عنوان "تاريخ الخلق ..." وقررت أن أخبرك بها حتى النهاية.

ملاحظة
بعد مزيد من القراءة في إنشاءات النموذج http: // 127.0.0.1 (https: // 127.0.0.1) ، يجب إزالة المساحة بعد http: // (https: //) عند الدخول إلى شريط عنوان المتصفح. تم إدراج مسافة عند نشر هذه المقالة لمنع المحرك من تحويل النص تلقائيًا إلى روابط.



تحضير خادم لتثبيت Nextcloud


Nextcloud هو تطبيق ويب يحتوي على مجموعة من الملفات ويعمل مع قاعدة بيانات MySQL معينة. يتم تثبيت تطبيق الويب كموقع عادي ، لتثبيته تحتاج إلى تحميل ملفات "المحرك" إلى الخادم ، وتشغيل ملف التثبيت وتحديد تفاصيل الوصول إلى قاعدة البيانات التي تم إنشاؤها مسبقًا لهذا الموقع أثناء التثبيت.

قم بإنشاء دليل يتم فيه وضع ملفات Nextcloud:
# mkdir / var / www / nextcloud

قررت رفض HTTP ، مع ترك الوصول فقط عبر HTTPS. للقيام بذلك ، تحتاج إلى تكوين أباتشي.

افتح الملف:
# nano /etc/apache2/sites-available/default-ssl.conf
وقبل العلامة ، أضف المحتوى التالي:

<Directory /var/www/nextcloud> Options FollowSymLinks AllowOverride All Require all granted </Directory> 


تعطيل تكوين HTTP:
# a2dissite 000-default.conf

إغلاق المنفذ 80:
# ufw حذف السماح 80

وأعد تشغيل خادم الويب:
# خدمة apache2 إعادة التشغيل

تحتاج الآن إلى إنشاء قاعدة بيانات لـ nextcloud. نقوم بإدخال mysql عن طريق إدخال كلمة المرور من mysql superuser:
# mysql -u root -p

إنشاء قاعدة بيانات تسمى nextcloud:
الخلية> إنشاء قاعدة بيانات `nextcloud` ؛

قم بإنشاء مستخدم باسم nextcloud وكلمة المرور التافهة nc123:
الخلية> إنشاء مستخدم 'nextcloud' @ 'localhost' معرّف بواسطة 'nc123'؛

نمنح حق الوصول الكامل لمستخدم nextcloud إلى قاعدة بيانات nextcloud التالية:
mysql> منح جميع الامتيازات على `nextcloud`. * TO 'nextcloud' @ 'localhost'؛

تحديث جدول الامتيازات:
الخلية> امتيازات فلوش ؛

خروج الخلية:
الخلية: الخلية> الخروج

بالإضافة إلى ذلك ، تحتاج إلى تثبيت وحدات إضافية لـ PHP:
# apt-get تثبيت curl libcurl3 libcurl3-dev php5-curl
# a2enmod إعادة الكتابة

في الجزء الأول من هذه القصة ، قمنا بفتح منافذ لتفاعل الشبكة والبريد ، ولكن بالنسبة لهدفنا فهي غير مطلوبة ومن الأفضل إغلاقها. حذف القواعد:
# حذف UFW يسمح 138 / UDP
# حذف UFW يسمح 139 / UDP
# ufw حذف السماح 139 / tcp
# حذف UFW يسمح 445 / TCP
# ufw حذف السماح 25
# ufw حذف السماح 465
# ufw حذف السماح 110
# ufw حذف السماح 143
# ufw حذف يسمح 993



قم بتثبيت Nextcloud


قم بتنزيل الملفات وفكها في الدليل المقصود:
# wget download.nextcloud.com/server/releases/nextcloud-11.0.2.tar.bz2
# tar xjf nextcloud-11.0.2.tar.bz2 -C / var / www

تغيير أذونات المجلد:
# chmod 755 / var / www / nextcloud

ونعين مالك هذا المجلد خادم ويب حتى لا تكون هناك مشاكل في الكتابة عليه:
# chown -R www-data: www-data / var / www / nextcloud

هذا كل شيء! يتم تثبيت الخدمة ، إذا قمت بكتابة في المتصفح https: // 127.0.0.1/nextcloud ، فسيتم فتح معالج التثبيت. ولكن دعنا ننتظر هذا ، بعد أن أعدنا مسبقًا مكانًا لتخزين بيانات المستخدم.

من الجدير بالذكر أن إصدار Nextcloud 11.0.2 قديم تمامًا حاليًا ويحتوي على ثغرات غير موجودة في الإصدارات الأحدث والأحدث ، لذلك إذا قمت بتثبيت الفرع 11.x ، فمن الأفضل تثبيت إصدار أحدث (في بداية 2018 - هذا الإصدار 11.0.7).



تنظيم تخزين Nextcloud


هذا الجزء اختياري ويمكن تخطيه دون مشاكل - سيعمل كل شيء بدونه. ومع ذلك ، إذا ذهبت إلى إنشاء دليل بيانات خارج الجهاز الظاهري ، فإنني أوصي بأن تتعرف عليه.

بشكل افتراضي ، سيتم تخزين المحتوى المتزامن في الدليل / var / www / nextcloud / nxcdata. هذا الخيار لم يناسبني على الفور لعدة أسباب. من ناحية ، لا أريد زيادة حجم ملف القرص الافتراضي باستمرار. من ناحية أخرى ، أود أن يكون لدي حل منفصل ومستقل عن حل تخزين بيانات الجهاز الظاهري. أبسط شيء يتبادر إلى الذهن على الفور هو استخدام محرك أقراص USB. إذا لم يكن هناك مساحة كافية ، يمكن ببساطة استبدال محرك الأقراص. إذا لزم الأمر ، يمكن توصيله بجهاز كمبيوتر آخر وتنزيل الملفات اللازمة. المحمول ومريح. ومع ذلك ، لم أكن أرغب في استخدام USB 2.0 بسبب النطاق الترددي الصغير نسبيًا بالمعايير الحديثة ، ولم أنجح مع USB 3.0 - لم يرغب برنامج المحاكاة الافتراضية (WMVare و VirtualBox) في إعادة توجيه الأجهزة المتصلة عادةً عبر وحدة تحكم USB 3.0.

زادت شهيتي في عملية إنشاء السحابة ولم يعد لدي أقل من تيرابايت واحد ، لذلك قررت في النهاية توصيل محرك أقراص ثابتة عادي بسعة 2 تيرابايت إلى الجهاز الظاهري ، والذي كان موجودًا بالفعل ومتصلاً داخل الكمبيوتر. إذا لزم الأمر ، يمكن سحبها دون مشاكل وتوصيلها عبر محول SATA <-> USB 3.0 الحالي.

لذا ، فإن الفكرة الرئيسية هي تنظيم نقطة دائمة لربط دليل بمحتوى مستخدم خارج الدليل / var / www / nextcloud ، حيث يتم إنشاء ارتباط رمزي يسمى nxcdata يشير إلى دليل البيانات الحقيقي ، والذي يمكن توصيله بطرق مختلفة على وسائط مختلفة.

إنشاء دليل:
# mkdir / mnt / nxcdata

نقوم بتغيير الحقوق:
# chmod 770 / mnt / nxcdata

نجعل مالك خادم الويب:
# chown www-data: www-data / mnt / nxcdata

يمكنني وضع البيانات في أي مكان وفي أي مكان ، الشيء الرئيسي هو وضع رابط رمزي لهذا الدليل في دليل / mnt / nxcdata وتسميته nxcdata ، أي سيبدو المسار الكامل مثل / mnt / nxcdata / nxcdata.

أولاً ، قمت باختبار حل المجلد المحلي الذي قمت بإنشائه في الدليل الرئيسي.

إنشاء مجلد في المكان الصحيح:
$ mkdir / home / user / nxcdata

تغيير الحقوق:
# chmod 755 / home / user / nxcdata

يملك خادم الويب:
# chown -R www-data: www-data / home / user / nxcdata

إنشاء رابط رمزي:
# ln -s / home / user / nxcdata / mnt / nxcdata / nxcdata

كان هذا الحل قابلاً للتطبيق ، لذا يمكنك المضي قدمًا. يمكن توصيل دليل البيانات الخارجية بطريقتين - من خلال خدمة VMWare المشتركة أو مباشرة كقرص أو قسم فعلي. يجب أن يكون مفهوما أن الحل الأول ممكن فقط إذا تم تثبيت أدوات vmware ، والتي يتم تثبيتها بدون مشاكل فقط إذا كانت هناك واجهة رسومية لنظام التشغيل (وإلا ، سيكون عليك تحرير نصوص تثبيت أدوات vmware). إذا تخلينا عن الواجهة الرسومية ، فلا يزال هناك فقط خيار توصيل محرك الأقراص مباشرة بالجهاز الافتراضي ، ولكن مع هذا الحل كان علي أن أعاني كثيرًا. بعد مرور بعض الوقت ، ما زلت أجد إصدارًا مستقرًا للعمل ، مع الأخذ بعين الاعتبار اختراع نص برمجي عالمي ، والذي يتضمن كلا خياري الاتصال.

بالنسبة للمجلد المتصل عبر مجلدات VMWare المشتركة في قسم المجلدات المشتركة من إعدادات الجهاز الظاهري ، تحتاج إلى توصيل المجلد الضروري من النظام المضيف وإعطائه اسم vmw-nxcdata. يمكن أن يشير هذا المجلد إلى بعض الأدلة الموجودة على القرص الثابت أو مباشرة إلى الدليل الجذر لبعض الأقراص على النظام المضيف.

سيظهر المجلد المثبت في النظام الظاهري تلقائيًا على طول المسار / mnt / hgfs / vmw-nxcdata. ومع ذلك ، تكمن المشكلة في أن خادم الويب لن يكون لديه حقوق كافية لكتابة الملفات على هذا المسار ولا يمكن للوسائل القياسية للنظام إعادة تعيين الحقوق لهذا الدليل. لذلك ، كان عليّ معرفة كيفية تركيب هذه الموارد يدويًا.

قم بإنشاء مجلد:
# mkdir / mnt / vmw-nxcdata

نقوم بالتركيب باستخدام وحدة vmhgfs ، التي تم تثبيتها باستخدام أدوات vmware:
# mount -t vmhgfs -o uid = www-data، gid = www-data، fmask = 007، dmask = 007 .host: / vmw-nxcdata / mnt / vmw-nxcdata

يلزم إجراء التثبيت باستخدام هذه المعلمات تمامًا للتشغيل بدون مشاكل لخادم الويب في المستقبل. في البداية ، قمت بالتثبيت دون تحديد uid / gid والأقنعة ، ولكن بعد ذلك لم يؤد ذلك إلى أي شيء جيد ، حيث لم يعد من الممكن تغيير الحقوق بعد التركيب. بعد الانتهاء من التركيب ، قد يعرض: "تعذر إضافة إدخال إلى mtab ، متابعة" ، ولكن سيتم تحميله والعمل.

عظيم ، لقد قمنا بتثبيت الدليل. الآن يمكنك وضع رابط رمزي لهذا الدليل في / mnt / nxcdata. ولكن لا أريد القيام بذلك يدويًا في كل مرة أقوم فيها بتشغيل الخادم أو إعادة تشغيله. أسهل طريقة هي إدخال الأمر أعلاه في الملف /etc/rc.local لتثبيته على السطر "exit 0". ومع ذلك ، أردت أن يتم إلغاء التثبيت التلقائي عند إيقاف تشغيل الجهاز الظاهري من أجل أمان بيانات موثوق. وقررت أن أفعل كل شيء على مستوى الخدمة وأتعامل مع آليات init / update-rc قليلاً ، وكلما شعرت بالفضول واتضح أن الأمر مثير للاهتمام.

معنى الإجراءات التالية هو إنشاء خدمة نظام يتم استدعاؤها وتنفيذ أوامر محددة مسبقًا عند تشغيل النظام أو إيقاف تشغيله. يتم وصف الخدمة من خلال نص برمجي تم تجميعه وفقًا لقواعد معينة وتقع في /etc/init.d. توجد كتلة INIT INFO في بداية البرنامج النصي وتحتوي على معلومات إضافية أود أن أذكر فيها توجيهات البدء الافتراضي والإيقاف الافتراضي - فهي تحدد مستويات التنفيذ التي يجب عندها تشغيل البرنامج النصي أو إيقافه افتراضيًا.

مستويات التنفيذ:

0 - تنفيذ البرنامج النصي عند إيقاف تشغيل النظام
1 - تنفيذ البرنامج النصي عند بدء تشغيل النظام في وضع المستخدم المفرد
2 - تنفيذ البرنامج النصي عند بدء تشغيل النظام في وضع متعدد المستخدمين
3 - 5 - محفوظة
6 - تنفيذ البرنامج النصي عند إعادة تشغيل النظام

بعد كتابة البرنامج النصي ، يتم تنشيطه باستخدام آلية تحديث- RC ، التي ، في الواقع ، تنشئ روابط إلى البرنامج النصي في الدلائل الضرورية /etc/rc0.d - /etc/rc6.d ، التي تتوافق محتوياتها مع المهام التي تؤديها مستويات التشغيل. يمكن إنشاء الروابط بشكل مستقل ، ولكن على عكس تمكين أو تعطيل تكوينات خادم الويب أباتشي ، تحتاج إلى مراعاة العديد من الفروق الدقيقة هنا ، لذلك تحتاج إلى تمكين الخدمة أو تعطيلها من خلال تحديث- RC.

لذا قم بإنشاء ملف:
# nano /etc/init.d/nxcdata_automount.sh

واكتب المحتويات التالية فيه:

 #!/bin/sh # nxcdata_automount.sh 1.0 ### BEGIN INIT INFO # Provides: myscript # Required-Start: # Required-Stop: # Default-Start: 1 2 3 4 5 # Default-Stop: 0 6 # Short-Description: nxcdata_automount.sh 1.0 # Description: nxcdata_automount.sh 1.0 ### END INIT INFO . /lib/lsb/init-functions # Start actions perform_start() { log_daemon_msg «Start nxcdata_automount» sleep 30 mount -t vmhgfs -o uid=www-data,gid=www-data,fmask=007,dmask=007 .host:/vmw-nxcdata /mnt/vmw-nxcdata #mount -t ntfs-3g -o uid=www-data,gid=www-data,fmask=007,dmask=007 /dev/sdb1 /mnt/sdb1 #mount -t ext4 /dev/sdb1 /mnt/sdb1 sleep 5 service fail2ban restart log_end_msg 0 return 0 } # Stop actions perform_stop() { log_daemon_msg «Stop nxcdata_automount» umount /mnt/nxcdata log_end_msg 0 return 0 } case $1 in start) perform_start ;; stop) perform_stop ;; *) echo “Usage: /etc/init.d/myscript {start|stop}” exit 3 ;; esac 


انتبه إلى فريقين تم التعليق عليهما في قسم Perform_start - هذا هو احتياطينا للمستقبل. أيضا ، بعد التركيب ، يتم إعادة تشغيل خدمة fail2ban.

المفارقة هي أنني بعد عام لم أعد أتذكر لماذا فعلت ذلك ، لكنني أشك كثيرًا في أنه تم القيام بذلك على هذا النحو. من الواضح أنه بعد تحميل الخدمة ، لسبب ما ، تعطلت الخدمة أو فشلت في البدء في البداية وكان يجب إعادة تشغيلها يدويًا.

بعد هذا الإلهاء ، نواصل تكوين المزيد. إنشاء رابط رمزي:
# ln -s / mnt / vmw-nxcdata / mnt / nxcdata / nxcdata

نجعل نصنا قابلاً للتنفيذ:
# chmod + x /etc/init.d/nxcdata_automount.sh

أضف البرنامج النصي لبدء التشغيل:
# update-rc.d nxcdata_automount.sh الإعدادات الافتراضية

نقوم بإعادة تشغيل النظام والتأكد من نجاح التثبيت التلقائي وأن كل شيء يمكن الوصول إليه بالطرق الصحيحة.

لإزالة البرنامج النصي ، ستحتاج إلى تشغيل أمرين:
# update-rc.d -f nxcdata_automount.sh إزالة
# rm -f /etc/init.d/nxcdata_automount.sh

في حالة تركيب محرك أقراص ليس من خلال مجلدات VMWare المشتركة ، يجب عليك اتباع نفس الخطوات مباشرةً عند التثبيت عبر مجلدات VMWare المشتركة ، ولكن مع الأخذ في الاعتبار حقيقة ظهور محرك أقراص ثانٍ كامل في النظام. كيف تعرف حرف محرك الأقراص؟

يتم توصيل معظم أجهزة حظر Linux عبر واجهة SCSI ، لذلك ستبدأ الأقراص في معظم الحالات بالحروف sd. الحرف الثالث في اسم القرص يعني رقمه التسلسلي في النظام ويشار إليه أبجديًا: sda - القرص الأول ، sdb - القرص الثاني ، sdc - الثالث وهكذا. ثم يأتي الرقم الذي يحدد رقم القسم على القرص: sda1 و sda2 وهكذا. إن أسهل طريقة لمشاهدة كافة محركات الأقراص المعينة هي النظر إلى محتويات الدليل / dev / وتصفية الأجهزة sd:

$ ls -l / dev / | grep sd

على سبيل المثال ، نحتاج إلى توصيل محرك أقراص sdb1 بنظام ملفات NTFS.

قم بإنشاء دليل وتركيب القرص عليه:
# mkdir / mnt / sdb1
# mount -t ext4 / dev / sdb1 / mnt / sdb1

قم بإنشاء دليل للبيانات ، وقم بتعيين الحقوق والمستخدم لها:
# mkdir / mnt / sdb1 / nxcdata & chmod 770 / mnt / sdb1 / nxcdata & chown -R www-data: www-data / mnt / sdb1 / nxcdata

بعد ذلك ، تحتاج أيضًا إلى إنشاء برنامج نصي للحساب التلقائي وضبط أمر التحميل في البرنامج النصي (توجد أمثلة على توصيل محرك أقراص مع NTFS و EXT4 بالفعل في البرنامج النصي والتعليق عليها) وإضافة البرنامج النصي لبدء التشغيل.

B إنشاء ارتباط رمزي إلى دليل البيانات:
# ln -s / mnt / sdb1 / nxcdata / mnt / nxcdata / nxcdata

في الواقع ، تم تصميم كل هذه المشكلة مع مجموعة من أدلة nxcdata لشيء واحد: لتوفير نقل بسيط لدليل البيانات في المستقبل - لن تحتاج إلى تعديل التكوين في محرك Nextcloud والتسلق إليه بشكل عام - كل ما عليك القيام به هو توصيل قرص جديد ، نسخ إلى له البيانات وإعادة إنشاء ارتباط رمزي يؤدي إلى دليل جديد مع البيانات. في الوقت نفسه ، لا تتجاوز جميع الإجراءات الدليل / mnt. لذلك اتضح أن كل شيء معقد تطوريًا ، لم أرغب في فقدان الحلول التي حصلت عليها.

ما هي أفضل طريقة لنقل البيانات خارج الجهاز الظاهري؟ سوف أشارك تجربتي حول الخيار الذي توقفت عنه ولماذا.

تم التقاط محركات أقراص USB تلقائيًا عند تشغيل الجهاز الظاهري ، وإلقاء نفسها بشكل صحيح وكامل في الداخل ، وعمل كل شيء دائمًا ، ولكن فقط حتى يتم فصل محرك الأقراص عن النظام لسبب ما. ساعد إعادة التشغيل أو قطع الاتصال المادي وتوصيل القرص. اتضح أن القرار غير موثوق به. لم يكن هناك مثل هذه المشكلة مع محركات الأقراص المحمولة ، ولكن حجمها وسرعة عملها بشكل قاطع لم يناسبني. ربما كان الأمر يستحق تجربة محرك خارجي مع قوة مستقلة.

عملت إعادة توجيه الدليل من خلال مجلدات VMWare المشتركة بثبات وبشكل مثالي. استوفى هذا الحل تمامًا مهمة مزامنة هاتفين ذكيين. كل شيء يعمل لعدة أيام ، تم ضخ عشرات غيغابايت من البيانات. ومع ذلك ، عندما قررت إضافة بيانات من الكمبيوتر إلى السحابة ، وجدت فجأة مشكلة في المسارات الطويلة وأسماء الملفات. من الناحية النظرية ، يبلغ الحد الأقصى لاسم الملف / المجلد NTFS 255 حرفًا ، ولكن عمليًا تحدده واجهة برمجة تطبيقات Windows بـ 244 حرفًا. من الناحية النظرية ، فإن الحد الأقصى لطول المسار إلى ملف أو مجلد في NTFS هو 32767 حرفًا ، ولكن في الممارسة العملية ، فإن واجهة برمجة تطبيقات Windows تحدده بـ 245 حرفًا. نظرًا لأنني معجب كبير بهيكلة المعلومات ، يمكن أن يكون طول طريقي كبيرًا جدًا. يمكن أن يكون عنوان الكتب غير المختصر أيضًا من 100 إلى 150 حرفًا ، بما في ذلك المسافات. هذا التقييد هو مشكلة معروفة في VMWare Shared Folders ، والتي لا يمكن معالجتها حتى عند استخدام Windows 10 مع جميع أنواع المفاتيح الذكية في التسجيل لإزالة حد 255 حرفًا. السبب المحتمل هو قيود vmhgfs. يجب التخلي عن هذه الطريقة المريحة للاتصال. تم إصلاح السبب بالتأكيد - المشكلة في نظام الملفات الظاهري ، والذي يتم استخدامه في آلية VMWare Shared Folders.

الحل التالي هو توصيل القرص الصلب مباشرة بالجهاز الظاهري. كما أنها لم تعمل بسلاسة. تعطل هيكل البيانات (أو نظام الملفات ، وكان هذا واضحًا لكل من NTFS و EXT2 / 3/4) باستمرار عندما "تم التقاط" القرص أو القسم الخاص به بواسطة برنامج الجهاز الظاهري ، أو عندما تم إرجاعه إلى النظام المضيف حتى لو قمت بنقل الكل Drive بلا اتصال بالإنترنت على النظام المضيف. في بعض الأوضاع ، لا أكتب أو أقرأ البيانات - لم أستطع حتى تهيئة القرص الصلب أو القسم الذي تمت إعادة توجيهه بشكل صحيح. ومع ذلك ، تمكنا من العثور على وضع عمل: تم توصيل قرص ثابت فعلي به قسم واحد ، تم تنسيقه في NTFS ، بالجهاز الظاهري في وضع اتصال معين: SATA / مستقل / دائم / استخدم قسمًا فرديًا. يجب أن يكون مجلد nxcdata الذي يحتوي على البيانات على القرص الصلب.



قم بتكوين Nextcloud Virtual Machine Access من شبكة المنطقة المحلية


ليست لدينا مشاكل في فتح مواقع الويب داخل جهاز افتراضي أو من نظام مضيف. ولكن كيف تفتح الموقع الذي تم إنشاؤه من كمبيوتر آخر على الشبكة المحلية؟ دعونا نلقي نظرة على هيكل شبكتنا ، الموضح أدناه.



تُظهر الصورة أن جهاز التوجيه متصل بالإنترنت مباشرة ويتم تكوينه بحيث يقوم تلقائيًا بتوزيع عناوين IP على الأجهزة المتصلة في النطاق 192.168.0.2-192.168.0.254. تم استلام العنوان 192.168.0.2 بواسطة جهاز الكمبيوتر الخاص بنا ، و 192.168.0.3 - الكمبيوتر الثاني الذي نقوم بإنشاء الخادم عليه. ومع ذلك ، يتم تثبيت برنامج المحاكاة الافتراضية على الكمبيوتر الثاني ، الذي أنشأ جهاز التوجيه الافتراضي الخاص به وتكوين DHCP الخاص به على الشبكة الفرعية 192.168.233.0/24. تلقى خادمنا الظاهري IP 192.168.133.138.

يمكنني بسهولة فتح الموقع داخل الجهاز الظاهري 192.168.233.138. يمكنني بسهولة فتح الموقع من الجهاز 192.168.0.3 ببساطة عن طريق إدخال عنوان IP المطلوب في المستعرض - لقد اعتنى برنامج المحاكاة الافتراضية بالفعل بالتكوين الصحيح لبيئة الشبكة على الجهاز المضيف. ولكن كيف يمكنني الوصول إلى الموقع من الكمبيوتر 192.168.0.2؟ إذا قمت بإدخال عنوان IP 192.168.233.138 ، فلن يتم فتح أي شيء بالنسبة لي ، حيث لا يعرف جهاز الكمبيوتر الخاص بي أو جهاز التوجيه الحقيقي أي شيء عن هذه الشبكة الفرعية. إذا قمت بإدخال العنوان 192.168.0.3 ، فلن يتم فتح أي شيء بالنسبة لي أيضًا ، نظرًا لعدم وجود موقع على هذا الكمبيوتر حقًا - فهو داخل جهازه الظاهري.

لحل هذه المشكلة ، تحتاج إلى تكوين جهاز التوجيه الظاهري للكمبيوتر 192.168.0.3. نحن نعلم بالفعل أن الوصول إلى المواقع يتم على المنفذين 80 و 443. عند الوصول إلى هذه المنافذ إلى جهاز 192.168.0.3 ، نحتاج إلى إنشاء توجيه بحيث تتم إعادة توجيه الطلبات إلى الجهاز الظاهري 192.168.233.138. لحسن الحظ لدينا الأدوات المتاحة. يحتوي VMWare Workstation على أداة محرر الشبكة الافتراضية التي يمكن فتحها من قائمة الجهاز الظاهري (تحرير -> محرر الشبكة الافتراضية).



تسمح لك هذه الأداة بإدارة إعدادات الشبكة بمرونة كبيرة. نحتاج إلى تحديد بطاقة الشبكة الافتراضية VMNet8 والنقر فوق الزر "إعدادات NAT ..." الذي أصبح متاحًا. في النافذة التي تفتح ، تحتاج إلى إضافة قواعد لإنشاء التوجيه الذي نحتاجه.



حدد منفذ النظام المضيف ثم حدد عنوان IP ومنفذ الجهاز الظاهري حيث يجب إعادة توجيه الطلبات. لإعادة توجيه حركة مرور HTTPS ، يجب تحديد منفذ النظام المضيف 443 والمنفذ 443 وعنوان الجهاز الظاهري 192.168.233.138. بعد إنشاء القواعد ، انقر فوق "موافق" في جميع النوافذ - يتم إعادة تكوين بيئة الشبكة الافتراضية تلقائيًا.

بعد هذه التغييرات ، ستبدأ مواقعنا في الفتح من الجهاز 192.168.0.2 عند الوصول إلى العنوان 192.168.0.3.

تتوفر إعدادات مشابهة لإعادة توجيه المنفذ ليس فقط لـ VMWare ، ولكن أيضًا لـ VirtualBox (الإعدادات ← الشبكة ← حدد المحول المطلوب ← متقدم ← إعادة توجيه المنفذ). ومع ذلك ، أثناء التجارب المتعلقة بتوصيل محرك الأقراص الثابتة بهذه المرحلة ، وجدت مشغل VMWare المجاني مثبتًا ، حيث لم يكن محرر الشبكة الافتراضية مثبتًا. لم أجد أي شيء حول إعادة توجيه المنفذ لـ VMWare Player على الإنترنت واضطررت إلى استخدام نسخة تجريبية من VMWare Workstation - عند تثبيت المنتج ، فإنه يمنح 30 يومًا من الاستخدام المجاني. بعد 30 يومًا ، يمكن إزالة المنتج وتنظيفه وتثبيته مرة أخرى ، ولكن هذا الاهتمام بالخادم فائض إلى حد ما وغير مرغوب فيه بشكل واضح.ثم ذهبت إلى خدعة صغيرة (أو كبيرة). تحتوي مجموعة ملفات VMWare Workstation على الأداة المساعدة vmnetcfg ، والتي تعمل بشكل أساسي من خلال عنصر محرر الشبكة الافتراضية. ومع ذلك ، لم يكن في مجموعة ملفات VMWare Player. ولكن عند تثبيت برنامج VMWare Player ، هل يقوم بطريقة ما بتهيئة بيئة الشبكة الخاصة به؟ لقد أخذت هذه الأداة المساعدة للتو وقمت بنسخها إلى المجلد باستخدام VMWare Player ، ثم قمت بتشغيلها. والمثير للدهشة أن كل شيء نجح. من الممكن ألا تعمل إعدادات الشبكة الرقيقة في بيئة VMWare Player ، ولكن يتم إعادة توجيه المنفذ ، ولست بحاجة إلى المزيد.

للوصول إلى خادمنا من الإنترنت ، تحتاج إلى إعادة توجيه المنافذ على جهاز توجيه متصل بالإنترنت بنفس الطريقة. في البرامج الثابتة للغالبية العظمى من أجهزة التوجيه ، يوجد قسم إعادة توجيه المنفذ حيث يمكنك تكوين التوجيه بتحديد المنفذ الخارجي والمنفذ وعنوان IP الخاص بالجهاز الداخلي. ومع ذلك ، هناك فارق بسيط طفيف. إذا أعطانا الموفر عنوان IP حقيقيًا أو اشتريناه منه ، فلن تكون هناك مشاكل - فنحن ندخل عنوان IP هذا من جهاز كمبيوتر من أي مكان في العالم ، سيعيد جهاز التوجيه الحقيقي توجيه حركة المرور إلى جهاز كمبيوتر به جهاز ظاهري يقوم جهاز التوجيه الظاهري بإعادة توجيه حركة المرور مباشرة إلى جهاز ظاهري سيارة. ولكن ما يجب القيام به لشخص لا يملك الفرصة للحصول على عنوان IP حقيقي ويحصل على عناوين ديناميكية أو وراء NATمزود ، والحصول على عنوان IP "الرمادي"؟ لم يكن عليّ حل هذه المشكلة ، نظرًا لأن لدي عنوان IP ثابتًا "أبيض". أي شخص يجب أن يحل مثل هذه المشكلة بطريقة أو بأخرى سيكون عليه التعامل مع هذه المشكلة. أنصح بالنظر في اتجاه dyndns أو freedns.afraid.org في حالة العناوين الديناميكية ، أو شراء VDS رخيص لمحاولة التوصل إلى نوع من التوجيه بنفسك ، لأنه في أي حال ، بدون خادم خارجي بعنوان IP ثابت ، لا يمكن حل هذه المشكلة.

بعد تكوين التوجيه ، قمت بإصلاح عناوين IP لأجهزة الكمبيوتر 192.168.0.3 و 192.168.233.138 ، وكتابتها يدويًا في إعدادات بطاقة الشبكة لهذه الأجهزة لاستبعاد إعادة تعيينها تلقائيًا.



إعداد Nextcloud


حان الوقت الآن لفتح https: // 127.0.0.1/nextcloud في المتصفح داخل الجهاز الظاهري ، https: // 192.168.233.138/nextcloud من النظام المضيف أو ، بناءً على التوجيه الذي تم تكوينه أعلاه ، https: // 192.168.0.3/nextcloud من أي الكمبيوتر على الشبكة المحلية.

بعد ذلك ، نقوم بتعيين تسجيل الدخول / كلمة المرور للمسؤول ، والوصول إلى قاعدة البيانات التي تم إنشاؤها سابقًا ، وكموقع للتخزين ، حدد المسار الكامل إلى دليل nxcdata: / mnt / nxcdata / nxcdata. لا تختلف خطوة الإعداد هذه عن تثبيت موقع.

في إعدادات المشرف ، قمت بإجراء التغييرات البسيطة التالية:

- شخصي ← اختر اللغة الروسية وحدد بريدًا إلكترونيًا للمستخدم المسؤول @ localhost
- الإدارة → الوصول العام → تعطيل كافة العناصر
- الإدارة → مسح الاستخدام → تعطيل كافة العناصر
- الإدارة → الإعدادات المتقدمة → إدارة الملفات: تم تعيين "الحد الأقصى لحجم ملف التحميل" على 25 غيغابايت
- المستخدمون → قاموا بإنشاء مجموعة المستخدمين وإضافة مستخدم جديد إليها

بعد الإعداد ، تحتاج إلى تمكين التخزين المؤقت.

افتح الملف:
# nano /var/www/nextcloud/config/config.php

وفي النهاية قبل ")؛" أضف ما يلي: تحتاج الآن إلى السماح بوصول خارجي إلى الموقع على مستوى "محركه". افتح الملف: # nano /var/www/nextcloud/config/config.php في قسم Trusted_domains تحتاج إلى إضافة عنوان IP للخادم إلى الصفيف ، أضف العنوان الذي تم تثبيت Nexcloud عليه. سيبدو قسم المجالات الموثوقة في حالتنا كما يلي:

'memcache.local' => '\OC\Memcache\Memcached',
'memcache.distributed' => '\OC\Memcache\Memcached',
'memcached_servers' => array(
array('localhost', 11211),
),









'trusted_domains' =>
array (
0 => '127.0.0.1',
1 => '192.168.233.138',
),


يمكنك الآن التحقق من صلاحية الخدمة - فتح الموقع وتسجيل الدخول كمستخدم مستخدم. إذا كان التفويض ناجحًا ، فإن الخدمة جاهزة للمعركة - يمكنك تثبيت التطبيق للمزامنة على أجهزة الكمبيوتر والهواتف الذكية ، للوصول أدخل عنوان IP 192.168.0.3 وتفاصيل الوصول إلى الحساب التي تم إنشاؤها لكل جهاز.
لحسن الحظ أو لسوء الحظ ، لم أكن مضطرًا إلى استخدام الإمكانات الكاملة للخدمة التي تم إنشاؤها ، حيث كنت في البداية أحتاج إلى نظام نسخ احتياطي مع التحقق ، وفي البداية ، أردت فقط التخريب ، ولكن سرعة تنفيذ عدد كبير جدًا من الملفات الصغيرة أحزنني كثيرًا. لقد فعلت كل شيء من أجل النمو ، لكنني لن أستفيد منه ، وبعد ذلك أصبحت بطريقة ما لا تصل إلى السحابة تمامًا.

تم تقديم نظرة عامة أكثر تفصيلاً عن استخدام الخدمة بواسطة مستخدم wtigga في نهاية عام 2017 في مقاله "كيفية تنزيل VPS:" سحابة "Nextcloud الخاصة بك . من وجهة نظر المستخدم ، تقدم المقالة نظرة عامة على خادم Nextcloud الأحدث ، الإصدار 12.



الضبط الدقيق التالي لـ Nextcloud


أثناء تشغيل السحابة خلال الشهر الأول من العمل ، ظهرت بعض المشاكل التي كان علي حلها بمساعدة المجتمع أو بمفردي. يجب أن أقول إنني استخدمت الخدمة بجد وقد راجعتها في الواقع لمقاومة الإجهاد. كانت مزامنة بضعة غيغابايت من البيانات من الهواتف خلال المساء وما يصل إلى مليون ملف صغير من جهاز كمبيوتر أمرًا شائعًا. بشكل عام ، تركت الخدمة انطباعًا إيجابيًا للغاية بالنسبة لي.

لن أقول أن الحلول أدناه صحيحة وجميلة ، ولكن هذه العكازات تعمل على الأقل للإصدار 11.0.2 ، وإلا فسيكون من المستحيل استخدام الخدمة. في الإصدار 12.x ، ربما تم تحسين شيء ما وإصلاحه ، لذلك لا أوصي بتعيين هذه الإعدادات على الفور كجزء من إعداد بدء التشغيل ، بينما يمكن تطبيقها على الفور في سطر 11.x.

المشكلة 1

يحدث خطأ مثل "الملف مؤمن" أثناء المزامنة. توقف التزامن. المشكلة معروفة - من الضروري مسح محتويات جدول oc_file_locks عن طريق تنفيذ الاستعلام التالي من وحدة تحكم mysql (عند تخويل مستخدم nextcloud):
mysql> DELETE FROM oc_file_locks WHERE 1

نظرًا لأن هذه الأخطاء ليست غير شائعة ، لم
أتوصل إلى أي شيء أفضل من إنشاء برنامج نصي ووضعه مباشرة في المجلد الجذر: # nano / root / blank_oc_file_locks

محتويات البرنامج النصي :

 #!/bin/bash mysql -unextcloud > -pnc123 -D nextcloud <<MY_QUERY DELETE FROM oc_file_locks WHERE 1 MY_QUERY 


يمكن تنفيذ البرنامج النصي يدويًا ، ولكن هذه ليست طريقتنا. قررت تشغيله تلقائيًا كل 15 دقيقة باستخدام cron (https://ru.wikipedia.org/wiki/Cron).
للقيام بذلك ، قم بإنشاء ملف:
# nano / root / crontab

مع المحتويات التالية: الآن أنت بحاجة إلى إجراء تغييرات على المجدول: # crontab / root / crontab يمكنك التحقق من التغييرات مثل هذا: # crontab -l مشكلة 2 عند المزامنة عبر webDAV في السجلات (انظر لوحة المشرف ، مفوض من قبل المسؤول) قد تظهر الأخطاء التالية:

*/15 * * * * root bash /root/empty_oc_file_locks












Error PHP reset() expects parameter 1 to be array, null given at /var/www/nextcloud/apps/files_versions/lib/Storage.php#783
Error PHP ksort() expects parameter 1 to be array, null given at /var/www/nextcloud/apps/files_versions/lib/Storage.php#782
Error PHP Invalid argument supplied for foreach() at /var/www/nextcloud/apps/files_versions/lib/Storage.php#759
Error PHP Undefined index: by_file at /var/www/nextcloud/apps/files_versions/lib/Storage.php#759
Error PHP Undefined index: all at /var/www/nextcloud/apps/files_versions/lib/Storage.php#757


هذه المرة ، لم يفعل المجتمع شيئًا واضطر إلى إجراء التحقيق بمفرده. يكمن السبب في الخطأ "فهرس غير محدد ... Storage.php # 757" ، والذي يتالي عدة أخطاء أخرى. نحن ننظر إلى رمز هذا الملف. كانت المشكلة برمتها في الحصة. في هذا السطر في الكود (Storage.php # 757) ، يتم حساب المساحة الخالية مع مراعاة حجم ملفات الأرشيف. حدث خطأ في الحساب ، على الرغم من تعيين الحصة على "غير محدودة". لإصلاح الخطأ في لوحة الإدارة ، قمت بتعيين حصة "لا نهائية لكن رقمية" لكل مستخدم ، على سبيل المثال ، 100 تيرابايت.

المشكلة 3

المشكلة في مزامنة ملفات htaccess - فهي ببساطة لا تتزامن! ولم أكن وحدي في بعض المنتديات طرحوا أسئلة مشابهة. ومع ذلك ، لم أقابل حلًا جاهزًا. كان علي أن أفكر مرة أخرى بنفسي. نتيجةً لـ googling ، وعرض السجلات ، وتحليل الشفرة ، لم أفكر في أي شيء أفضل من كيفية إصلاح ملف محرك nextcloud.
في الملف /var/www/nextcloud/lib/private/Files/filesystem.php نبحث عن السطر التالي: ونأتي به إلى النموذج التالي:

$blacklist = \OC::$server->getConfig()->getSystemValue('blacklisted_files', array('.htaccess'));




$blacklist = \OC::$server->getConfig()->getSystemValue('blacklisted_files', array(''));




حماية Nextcloud


يمكنك حماية خدمتنا من اختيار كلمات المرور للوحة الإدارة باستخدام fail2ban. للقيام بذلك ، تحتاج إلى وصف التعبير المميز الذي يحدث في سجلات nextcloud عندما تفشل المصادقة ، والتي سيتم تشغيل المشغل المقابل وفقًا لها.

قم
بإنشاء الملف: # nano /etc/fail2ban/filter.d/nextcloud.conf بالمحتويات

التالية:

[Definition]
failregex = {"reqId": ". *"، "RemoteAddr": ". *"، "App": " core "،" message ":" فشل تسجيل الدخول: '. *' \ (عنوان IP البعيد: '' \) "،" المستوى ": 2،" time ":". * "}
ignoreregex =

فتح الملف:
# nano / etc /fail2ban/jail.local

وفي نهاية الملف ، أضف ما يلي: أعد تشغيل الخدمة: # service fail2ban reset تحقق من وجود عامل تصفية نشط:

# nextcloud
[nextcloud]
enabled = true
port = http,https
protocol = tcp
filter = nextcloud
logpath = /var/log/nextcloud.log






# fail2ban-client status nextcloud

لا تنس أنه وفقًا لإعدادات fail2ban من الجزء السابق ، إذا تم إدخال كلمة المرور دون جدوى ست مرات متتالية لمدة 12 ساعة ، فسيتم حظر عنوان IP الخاص بك لمدة 30 يومًا. لقد أمضيت أمسيتين على نحو ما بسبب كلمة مرور غير صحيحة على أحد الهواتف ، حتى اكتشفت هذه الحقيقة البسيطة في سجلات النظام.



مزامنة سحابة الهاتف الذكي


لمزامنة محتويات الهواتف التي تعمل بنظام Android ، هناك تطبيق رائع FolderSync. يبرر البرنامج بالكامل سعره المنخفض.

تحتاج أولاً إلى إنشاء حساب جديد لتحديد https: // 192.168.0.3/nextcloud كعنوان الخادم ، وإدخال تسجيل الدخول وكلمة المرور للحساب الذي تم إنشاؤه مسبقًا وتمكين الشهادة الموقعة ذاتيًا. انقر فوق الزر "اختبار" وتأكد من أن الاتصال بالخادم سليم.

بعد ذلك تحتاج إلى إنشاء مهمة. في المهمة ، حدد الحساب الذي تم إنشاؤه مسبقًا وحدد نوع المزامنة - "إلى المجلد البعيد". حدد المجلد البعيد (يمكنك إنشاؤه مباشرة من التطبيق "وحدد المجلد المحلي للمزامنة. أقوم بتعيين الجدول في الساعة 2 صباحًا كل يوم. في إعدادات المزامنة ، قمت بتشغيل" مزامنة المجلدات الفرعية "و" مزامنة المجلدات المضمنة "، كما قمت بتحديد خيار استبدال الملفات القديمة دائمًا وفي حالة وجود تعارض سمحت باستخدام الملف المحلي افتراضيًا. في قسم "الاتصالات" ، قمت بإيقاف تشغيل جميع الاتصالات باستثناء Wi-Fi ، وقمت بتسجيل SSID لشبكة Wi-Fi المنزلية في قسم "شبكات WiFi المسموح بها" - التطبيق برعم يمكنني فقط المزامنة على شبكتي المنزلية ولا أحاول البحث في الخادم على شبكات أخرى ، لقد تركت بقية الإعدادات بشكل افتراضي.هنا يمكنك إضافة التصفية. لقد قمت بإنشاء عامل تصفية جديد ، "يحتوي اسم المجلد" وحدد القيمة [nosync]. وبالتالي ، يمكنني استبعاد بعض المجلدات في المجلد المحلي المحدد من المزامنة بمجرد إضافة الاسم "[nosync]" إلى النهاية.

تم إعداد هذا الإعداد لمجلدات محلية مثل DCIM و Download و Telegram و viber و WhatsApp. بالإضافة إلى اثنين من مجلدات المستخدم الخاصة بي بحجم عدة غيغابايت. مرة واحدة في اليوم ، تتم مزامنة محتويات هذه المجلدات مع الخادم ، ولا يتم حذف الإصدارات القديمة من الملفات الموجودة على الخادم ، ولكن تتم إعادة تسميتها ونقلها إلى الأرشيف. سمح هذا لي باستعادة الملفات المحذوفة عن طريق الخطأ أو استعادة التغييرات في بعض الملفات الأخرى بسرعة.



مزامنة سحابة الكمبيوتر الشخصي


أنا لا أعتبر نفسي مبرمجًا حقيقيًا. على مدى السنوات العشر الماضية ، كنت أبرمج بلغات البرمجة التي يتم استخدامها فقط في تطوير المعالجات أو الشرائح. نظرًا لأنني لم أفعل أي شيء في C / C ++ لمدة 15 عامًا ، لكنني كنت بحاجة لأتمتة شيء ما على الكمبيوتر ، فقد استخدمت لغات البرمجة النصية بنشاط مثل BAT / CMD أو برامج مثل Sign 0f Mistery أو xStarter. بمجرد أن اكتشفت وجربت ما هو AutoIt وهذا أصبح حقبة جديدة في أتمتة جهاز الكمبيوتر الخاص بي.

بعد أن اقتنعت باستقرار وموثوقية نظام المزامنة على الهواتف الذكية ، اعتقدت أنه سيكون من الجيد مزامنة البيانات على جهاز الكمبيوتر في المنزل. Nextcloud لديه عميل خاص لـ Windows ، وبطبيعة الحال ، أصبح المرشح الأول للاختبار. كنت أقوم بمزامنة حجم بيانات لترتيب تيرابايت ، يتألف من مئات الآلاف من الملفات ذات الأحجام المختلفة. كانت البيانات مختلفة: الموسيقى والصور والمستندات والكتب الإلكترونية والتوزيعات ومواقع النسخ الاحتياطي وما إلى ذلك. سيكون من المعقول تقليل كل هذا لمزامنة البيانات الأكثر أهمية ، على سبيل المثال ، مثل المستندات ، ولكن الإثارة استحوذت علي وأردت التحقق من قوة الخدمة.

بعد عشر ساعات من بدء المزامنة ، وفي الواقع أول تحميل للمحتوى على الخادم ، تعثر العميل فوق ملف باسم طويل. في ذلك الوقت ، على الخادم ، استخدمت أيضًا اتصال التخزين الخارجي عبر مجلدات VMWare المشتركة واضطررت إلى تجربة عشرات العملاء ، ثم قمت بإجراء تجارب بسيطة على نسخ الملفات يدويًا إلى الخادم لفهم أن المشكلة في جانب الخادم. لذلك ، بعد أسبوع من الإطلاق الناجح للخدمة ، اضطررت إلى العودة إلى الجهاز الظاهري الاحتياطي والتخلي عن آلية VMWare Shared Folders ، بدءًا من جديد. في النهاية ، أزلت هذا الاختناق من جانب الخادم ، واختبرت موثوقية الحل لمدة أسبوع من مزامنة الهواتف الذكية ، وقررت العودة إلى جهاز الكمبيوتر المنزلي مرة أخرى. هذه المرة لم يقم العميل برحلة فوق الملف المشؤوم وكنت سعيدًا بالفعلومع ذلك ، بعد نصف يوم من مزامنة الملفات الصغيرة ، تجمد العميل مرة أخرى. الآن اتضح أن المسار طويل جدًا على جانب الكمبيوتر المنزلي ولا يمكن لعميل Nextcloud معالجته بشكل صحيح. لسوء الحظ ، لم يعمل عميل Nextcloud الأصلي ، ولم يكن محتوى المعلومات الخاص به مرتفعًا جدًا ، لذلك اضطررت إلى التخلي عنه.

قضيت بعض الوقت في محاولة العثور على برنامج مناسب للمزامنة يدعم إدارة سطر الأوامر. كنت أرغب في القيام بمهمتي لكل مجلد كبير على الكمبيوتر وتشغيلها في وضع الدفعة. في وقت سابق ، كنت قد قمت بالفعل بإعداد مجموعة من ملفات BAT وعملتها للمزامنة باستخدام البرامج النصية وإدارة FreeFileSync من خلال سطر الأوامر. تم حل مشكلة المسارات الطويلة أو أسماء الملفات عن طريق تعيين المجلدات المحلية للنموذج "\\؟ \ D: \ Info" ، أي يشير بشكل أساسي إلى المجلد المحلي كمجلد شبكة. ومع ذلك ، ما هو webdav FreeFileSync لا يعرف. لسوء الحظ ، لم يكن هناك نظائر كاملة لـ FolderSync لنظام التشغيل Windows ، ولكن أكثر من مرة في المنتديات أوصوا باستخدام GoodSync ، وبعد اختيار عشرات البرامج الأخرى ، قررت تجربتها. لسوء الحظ ، فإن GoodSync أكثر تكلفة بكثير ،لكن إهدار لمرة واحدة قدره 15 دولارًا لسلامة بياناتهم الثمينة ، من حيث المبدأ ، نفايات مجدية. يحتوي البرنامج على وضع اختبار ، لذلك يمكنك أولاً التحقق من أدائه وثباته.

تحول برنامج GoodSync إلى برنامج سهل الاستخدام. هناك نسخة محمولة خاصة تسمى GoodSync2Go. لذا اهتمت بي. أثناء التثبيت ، تحتاج إلى تحديد حرف محرك الأقراص ويتم تثبيت البرنامج عليه في مجلد GoodSync. لقد قمت بإنشاء مجلد المزامنة في الدليل الجذر لمحرك الأقراص ، فلنفترض أن D ، وقمت بنقل مجلد GoodSync الذي تم إنشاؤه مع جميع المحتويات هناك.

[ تمت كتابة هذا النص خصيصًا للموقع geektimes.ru بواسطة AlexanderS .
يعد الرابط إلى المصدر اختياريًا ، ولكن مرجعه مرغوب فيه للغاية! ]


بعد التثبيت ، يحتاج البرنامج إلى إنشاء المهام: يشار إلى المجلد المحلي والمجلد البعيد للمزامنة. في معلمات المهمة ، حددت المزامنة من اليسار إلى اليمين مع اختيار الخيارين "الحذف المتزامن" و "حفظ الإصدارات السابقة من الملفات المحذوفة / المستبدلة". في الإعدادات على الجانب الأيسر ، حددت "نسخة آمنة" و "عدم إنشاء مجلد _gsdata_" ، على الجانب الأيمن - "نسخة آمنة" و "التحليل المسبق السريع بواسطة الطوابع الزمنية". وبالتالي ، يتم إنشاء المهام لكل مجلد مطلوب. لنفترض أنني قمت بتكوين المهمة في مجلد المعلومات وأطلق عليها اسم "bck_Info".
بعد ذلك ، في المجلد D: \ Sync ، يتم إنشاء ملف bck_Info.bat بالمحتويات التالية:

 @set dir=%~dp0 @%dir%GoodSync\GoodSync2Go-v10.exe /miniwin /exit sync "%~n0" 


هذه هي لغة البرمجة BAT. في السطر الأول من التعليمات البرمجية ، يتم تعيين المسار الحالي للبرنامج النصي الجاري تشغيله إلى المتغير. يبدأ السطر الثاني ملف GoodSync2Go-v10.exe من مجلد GoodSync على طول هذا المسار ، حيث يجب تشغيل المهمة باسم الملف (bck_Info) ، ويتم تصغير نافذة تنفيذ المهمة ، ويجب إغلاق البرنامج تلقائيًا عند الانتهاء من المهمة. يمكنني نسخ هذا النص البرمجي عدة مرات ، وفي كل مرة أغير اسمه فقط إلى اسم مهمة تم إنشاؤها مسبقًا في GoodSync. وبالتالي ، بمجرد النقر فوق الزر Enter في ملف BAT ، يمكنني بدء مزامنة المجلدات التي أحتاجها بشكل فردي.

لإضافة مهمة جديدة في FreeFileSync ، يمكنني فقط نسخ ملف xml النصي وتصحيحه يدويًا ، أي لم يكن مطلوبًا تشغيل الغلاف الرسومي للبرنامج على الإطلاق. في GoodSync ، يتم تسجيل جميع المهام في الملف D: \ Sync \ GoodSync \ GoodSync \ Profile \ jobs.tic وإضافة مهمة جديدة ستحتاج إلى فتح البرنامج وإنشائه ، لأن يعد تعديل هذا الملف مشكلة إلى حد ما ولا يُعرف ما قد يؤدي إليه.
لمزامنة جميع المجلدات ، يمكنك الآن كتابة نص bck_all.bat بسيط:

 @set dir=%~dp0 call %dir%bck_Info.bat call %dir%bck_Info2.bat call %dir%bck_Info3.bat call %dir%bck_Info4.bat 

يؤدي كل سطر من البرنامج النصي ببساطة إلى تنفيذ برنامج نصي منفصل ، والذي يبدأ التزامن.

كل هذا يعمل بشكل جيد ومريح ، ولكن لا يوجد تحكم في الأخطاء أثناء المزامنة. على سبيل المثال ، إذا لم يتم تشغيل الخادم ، فستكتمل جميع المهام بسرعة ، وسأعتقد ، بعد عودتها بعد ساعة ، أن المزامنة قد اكتملت بالفعل. في الوقت نفسه ، يتم إنشاء سجلات جميع المهام على طول المسار D: \ Sync \ GoodSync \ GoodSync \ Profile \ *. يكفي فقط إلقاء نظرة على سجل كل مزامنة لوجود كلمة "خطأ" - لسبب ما ، هذه هي الطريقة التي يتم بها الإبلاغ عن فشل المزامنة في السجل. لذلك ، تقرر كتابة برنامج صغير لتحليل هذه السجلات بعد جميع عمليات المزامنة ، والتي يجب أن تبدأ تلقائيًا بعد مزامنة جميع المجلدات. تلقى البرنامج اسم فخور log_analayser وهو مكتوب بلغة شبه البرمجة AutoIt . إذا كان أي شخص مهتمًا ، فقم بتنزيل نسخته الكاملةيمكنك على موقع AutoIt الرسمي ، الذي يحتوي على المكتبات الضرورية والمترجم و SciTE - محرر عبر الأنظمة الأساسية للرمز الذي يمكنك من خلاله تجميع البرنامج.

في أي وقت قضيته في تطوير الكود وتصحيحه ، كانت النتيجة ملف log_analayser.au3 بالمحتويات التالية:

 ; LOG Analyser 1.0 ;      - #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Res_Field=ProductName|LOG Analyser #AutoIt3Wrapper_Res_Fileversion=1.0.0.0 #AutoIt3Wrapper_Res_Field=OriginalFilename|log_analyser.exe #AutoIt3Wrapper_Res_Comment=     - #AutoIt3Wrapper_Res_Description= - ;**** #AutoIt3Wrapper_Res_Language=1049 #AutoIt3Wrapper_Res_ProductVersion=1.0 #AutoIt3Wrapper_Compile_Both=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ;AutoItSetOption ("WinTitleMatchMode", 2) ;       ;#NoTrayIcon ;         If WinExists('[CLASS:AutoIt v3;TITLE:' & @ScriptName & ']') Then MsgBox(48, @ScriptName, "     !"); ;             ;WinActivate('  ') Exit EndIf AutoItWinSetTitle(@ScriptName) #include <Array.au3> #include <_FileDirList.au3> ;  Local $msg_title = "LOG Analyser 1.0" Local $path = @ScriptDir Local $soft_open_log = "notepad.exe" Local $path, $dir_mode, $word, $file_analyse_name, $file_analyse_ext, $log_path, $log_msg_on Local $file_log, $word_detect, $file_analyse, $cnt_files, $i ;    if ($CmdLine[0] < 6) then MsgBox(0x10, $msg_title, "   !" & @CRLF & @CRLF & "  ") Exit else if (StringCompare($CmdLine[1], "file") = 0) then $dir_mode = 0 elseif (StringCompare($CmdLine[1], "dir") = 0) then $dir_mode = 1 else MsgBox(0x10, $msg_title, "     'file'  'dir'!" & @CRLF & @CRLF & "  ") Exit endif $word = $CmdLine[2] if ($dir_mode = 0) then $file_analyse_name = $CmdLine[3] else $dir_analyse = $CmdLine[3] endif $file_analyse_ext = $CmdLine[4] $log_path = $CmdLine[5] if (StringCompare($CmdLine[6], "err_msg_on") = 0) then $log_msg_on = 1 elseif (StringCompare($CmdLine[6], "err_msg_off") = 0) then $log_msg_on = 0 else MsgBox(0x10, $msg_title, "     'log_msg_on'  'log_msg_off'!" & @CRLF & @CRLF & "  ") Exit endif endIf ;   $file_log = $log_path & "\" & "log_analyser" & "-" & @YEAR & "-" & @MON & "-" & @MDAY & "-" & @HOUR & "-" & @MIN & "-" & @SEC & ".log" $word_detect = 0 ;    if ($dir_mode = 0) then $file_analyse = $file_analyse_name & "." & $file_analyse_ext if (_file_analyser($file_analyse, $msg_title, $word, $file_log, $word_detect) = 1) then $word_detect = 1 endif else ;     $dir_arr = _FileDirList($dir_analyse, "*."&$file_analyse_ext, 1, 1, 0) ;_ArrayDisplay($dir_arr) ;    -       if ($dir_arr = 0) then MsgBox(0x10, $msg_title, "       !" & @CRLF & @CRLF & "  ") Exit endif $cnt_files = $dir_arr[0] ;    $i = 0 While $i <> $cnt_files $i = $i + 1 $file_analyse = $dir_arr[$i] if (_file_analyser($file_analyse, $msg_title, $word, $file_log, $word_detect) = 1) then $word_detect = 1 endif WEnd endif ;    if ($word_detect = 1) and ($log_msg_on = 1) then if (MsgBox (0x41034, $msg_title, " !" & @CRLF & "      : " & $file_log & @CRLF & @CRLF & "   ?")) = 6 then ShellExecuteWait($soft_open_log, $file_log) endif endif Exit ;                    ;   ,   ,     Func _file_analyser($file_analyse, $msg_title, $word, $file_log, $word_detect) Local $file1, $file2, $file_line, $write_once $word_detect = 0 $write_once = 0 $file1 = FileOpen($file_analyse, 0) ;     If $file1 = -1 Then FileClose($file1) MsgBox(0x10, $msg_title, "   !" & @CRLF & @CRLF & "  ") Exit EndIf ;       While 1 $file_line = FileReadLine($file1) If @error = -1 Then ExitLoop if (StringInStr($file_line, $word) <> 0) then $word_detect = 1 ;            if (FileExists($file_log) = 0) then $file2 = FileOpen($file_log, 1) FileClose($file2) endif ;        if ($write_once = 0) then $write_once = 1 $file2 = FileOpen($file_log, 1) FileWriteLine($file2, " : " & $file_analyse) FileClose($file2) endif ;       $file2 = FileOpen($file_log, 1) FileWriteLine($file2, $file_line) FileClose($file2) endif WEnd ;     ,          if ($word_detect = 1) then $file2 = FileOpen($file_log, 1) FileWriteLine($file2, @CRLF) FileClose($file2) endif FileClose($file1) Return $word_detect EndFunc 

بعد كتابة الرمز ، اضغط على الزر F7 في محرر SciTE واحصل على ملف log_analayser.exe عند الإخراج.

يقوم البرنامج بتحليل الملف بحثًا عن وجود كلمة ، عند العثور عليها ، يتم إنشاء ملف سجل ، حيث يتم نسخ السطر الذي يحتوي على هذه الكلمة.

يمكن أن يعمل البرنامج في وضعين:

- تحليل ملف معين
- تحليل المجلد الذي يحتوي على الملفات للتحليل (يتم تحليل جميع المجلدات الفرعية أيضًا).

عند إجراء مكالمة وحدة تحكم ، تحتاج إلى تعيين ست معلمات للبرنامج:

1 - وضع التشغيل [file = file analysis؛ دير = تحليل المجلد الذي يحتوي على الملفات]
2 - البحث عن الكلمات الرئيسية
3 - اسم الملف أو المسار الكامل للمجلد
4 - ملحق الملف أو الملفات للتحليل في المجلد
5 - المسار الكامل للمجلد حيث سيتم وضع سجل البرنامج ؛
6 - عرض النافذة بعد تحليل جميع الملفات في حالة العثور على الكلمة المحددة [err_msg_on = عرض ؛ err_msg_off = لا تعرض]

وهكذا حصلنا على نص bck_auto.bat جديد:

 @echo Start Backup @set dir=%~dp0 call %dir%bck_all.bat log_analyser.exe dir  %dir%GoodSync\Profile log %dir%LOG err_msg_on exit 

يقوم البرنامج النصي بتشغيل ملف يتم من خلاله استدعاء مهام مزامنة جميع المجلدات الضرورية بشكل فردي واحدة تلو الأخرى ، ثم يتم استدعاء محلل سجل المزامنة ، وبعد ذلك ، في حالة حدوث أخطاء ، يتم عرض رسالة تطلب منك إلقاء نظرة على خطوط السجل حيث تم العثور على هذه الأخطاء ويمكنك فهم المهمة حدثت مشاكل. تتم كتابة هذه الأسطر إلى ملف سجل منفصل في المجلد D: \ Sync \ LOG.
ثم عانيت من فشل رهيب. لم يعمل محلل السجل. لا ، لقد عملت بشكل جيد على ملفات الاختبار ، لكنها لم ترغب بعناد في رؤية الأخطاء في السجلات. لفترة طويلة لم أتمكن من فهم ما هو السبب حتى اكتشفت شيئًا واحدًا رهيبًا: ليس فقط في سجل اللغة الإنجليزية ، يتم عرض الفشل بواسطة الكلمة الروسية الوحيدة "ERROR" ، ولكن أيضًا ترميز الأبجدية السيريلية هو Macintosh! لا أعرف سبب قيام المبرمجين من Siber Systems بذلك ؛ على الأرجح أن هذا ناتج عن عكاز رهيب داخل البرنامج. حسنًا ، من قال أن البرمجة يجب أن تكون مملة؟

لم يكن هناك خيار سوى دعم عكاز بآخر ونتيجة لذلك ظهر بناء عامل:

 @echo Start Backup @set dir=%~dp0 call %dir%bck_all.bat log_analyser.exe dir Ћ˜€ЃЉЂ %dir%GoodSync\Profile log %dir%LOG err_msg_on exit 

ومع ذلك ، ظهرت المشكلة التالية: GoodSync نفسها لا تحذف ملفات السجل ، ظهرت ملفات جديدة مع كل تنفيذ مهمة جديدة. وإذا فشل نوع من المزامنة ، فسيقوم المحلل لدينا دائمًا بالعثور على هذا الملف والإبلاغ بمرح عن الخطأ. لذلك ، قبل بدء المزامنة ، تقرر تنظيف المجلد D: \ Sync تلقائيًا من أي ملفات سجل. تم إنشاء نص أنيق لـ clean_logs.bat لهذا:

 @echo off set dir=%~dp0 For /R %dir% %%i in (*.log) Do ( Del /q "%%i") @echo on 

يقوم البرنامج النصي بتعطيل إخراج أي رسائل ، ويكتشف دليل تشغيل البرنامج النصي ، ويفحص جميع الملفات (بما في ذلك المجلدات الفرعية) حتى تنتهي ويحذف جميع الملفات باستخدام ملحق السجل. في نهاية العمل ، يتم تشغيل إخراج الرسالة.
تم تغيير البرنامج النصي bck_auto.bat:

 @echo Start Backup @set dir=%~dp0 @call clean_logs.bat call %dir%bck_all.bat log_analyser.exe dir Ћ˜€ЃЉЂ %dir%GoodSync\Profile log %dir%LOG err_msg_on exit 

كل شيء يعمل بشكل جيد للغاية ، ولكن الهدف هو أتمتة الإجراءات الروتينية. لماذا لا تقوم فقط بإيقاف تشغيل الكمبيوتر ليلاً والذهاب للنوم ، وسوف يقوم بمزامنة مجموعة من الملفات بنفسه وتحليلها وإيقاف المسار؟

دعونا نقوم بتعديل نص bck_auto.bat:

 @echo Start Backup & PCOFF @set dir=%~dp0 start MonitorOnOff.exe 0 @call clean_logs.bat call %dir%bck_all.bat log_analyser.exe dir Ћ˜€ЃЉЂ %dir%GoodSync\Profile log %dir%LOG err_msg_off shutdown /s /t 0 exit 

ظهر خطان جديدان في البرنامج النصي. يقوم تطبيق MonitorOnOff بإيقاف تشغيل الشاشة ببساطة (بحيث لا تضيء الغرفة ، ولكن إيقاف تشغيلها يدويًا كل مساء وتشغيله كل صباح أمر كسول جدًا) ، ويوقف أمر إيقاف التشغيل جهاز الكمبيوتر. تم تغيير المعلمة المسؤولة عن عرض الرسائل عند العثور على خطأ في log_analyser ، لأنه بعد المزامنة ليس من الضروري إبطاء تنفيذ البرنامج النصي بهذه الرسالة ، ولكن لتمكينه من إيقاف تشغيل الكمبيوتر.

مكتوب MonitorOnOff أيضا في AutoIt.

 ; Monitor On Off 1.0 ;   /  #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Res_Field=ProductName|Monitor On Off #AutoIt3Wrapper_Res_Fileversion=1.0.0.0 #AutoIt3Wrapper_Res_Field=OriginalFilename|MonitorOnOff.exe #AutoIt3Wrapper_Res_Comment=  /  #AutoIt3Wrapper_Res_Description=  /  ;**** #AutoIt3Wrapper_Res_Language=1049 #AutoIt3Wrapper_Res_ProductVersion=1.0 #AutoIt3Wrapper_Compile_Both=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ;AutoItSetOption ("WinTitleMatchMode", 2) ;       ;#NoTrayIcon ;         If WinExists('[CLASS:AutoIt v3;TITLE:' & @ScriptName & ']') Then MsgBox(48, @ScriptName, "     !"); ;             ;WinActivate('  ') Exit EndIf AutoItWinSetTitle(@ScriptName) HotKeySet("{F10}", "_Monitor_ON") HotKeySet("{F11}", "_Monitor_OFF") HotKeySet("{Esc}", "_Quit") Global Const $lciWM_SYSCommand = 274 Global Const $lciSC_MonitorPower = 61808 Global Const $lciPower_Off = 2 Global Const $lciPower_On = -1 Global $MonitorIsOff = False if ($CmdLine[0] <> 0) then _Monitor_OFF() endif While 1 Sleep(10) WEnd Func _Monitor_ON() $MonitorIsOff = False Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]') DllCall('user32.dll', 'int', 'SendMessage', _ 'hwnd', $Progman_hwnd, _ 'int', $lciWM_SYSCommand, _ 'int', $lciSC_MonitorPower, _ 'int', $lciPower_On) EndFunc Func _Monitor_OFF() $MonitorIsOff = True Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]') While $MonitorIsOff = True DllCall('user32.dll', 'int', 'SendMessage', _ 'hwnd', $Progman_hwnd, _ 'int', $lciWM_SYSCommand, _ 'int', $lciSC_MonitorPower, _ 'int', $lciPower_Off) _IdleWaitCommit(0) Sleep(20) WEnd EndFunc Func _IdleWaitCommit($idlesec) Local $iSave, $LastInputInfo = DllStructCreate ("uint;dword") DllStructSetData ($LastInputInfo, 1, DllStructGetSize ($LastInputInfo)) DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo)) Do $iSave = DllStructGetData ($LastInputInfo, 2) Sleep(60) DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo)) Until (DllStructGetData ($LastInputInfo, 2)-$iSave) > $idlesec Or $MonitorIsOff = False Return DllStructGetData ($LastInputInfo, 2)-$iSave EndFunc Func _Quit() _Monitor_ON() Exit EndFunc 

يتم التحكم في البرنامج الذي تم تشغيله من خلال ثلاثة مفاتيح: يقوم F10 بتشغيل الشاشة ، وإيقاف تشغيل F11 ، ويقوم زر ESC بإنهاء البرنامج وإلغاء تحميله من الذاكرة. إذا حددت أي معلمة عند بدء تشغيل البرنامج ، فسيقوم البرنامج قيد التشغيل بإيقاف تشغيل الشاشة على الفور.

الآن كل شيء على ما يرام - قبل الذهاب إلى الفراش ، ركضت للتو bck_all.bat ، بدلاً من "إيقاف تشغيل الكمبيوتر" وذهبت للنوم. لم تضيء الشاشة الغرفة بأكملها ، وتم إجراء المزامنة تلقائيًا وتم تحليل نجاحها تلقائيًا. في الصباح ، كان عليك فقط الاطلاع على محتويات المجلد D: \ Sync \ GoodSync \ LOG \ لبعض الملفات على الأقل. ولكن هذا ليس هو الحال أيضًا - لماذا تضيع الوقت إذا كان كل شيء على ما يرام؟ أحتاج إلى عمل سجل محلل سجل سجل محلل وتعليقه عند بدء تشغيل النظام حتى يعمل في اليوم التالي عندما يبدأ الكمبيوتر في التشغيل ويقلق انتباهي فقط عند فشل المزامنة. هكذا نشأ برنامج check_file_exist.

 ; Check File Exist 1.0 ;        #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Res_Field=ProductName|Check File Exist #AutoIt3Wrapper_Res_Fileversion=1.0.0.0 #AutoIt3Wrapper_Res_Field=OriginalFilename|check_file_exist.exe #AutoIt3Wrapper_Res_Comment=       #AutoIt3Wrapper_Res_Description=   ;**** #AutoIt3Wrapper_Res_Language=1049 #AutoIt3Wrapper_Res_ProductVersion=1.0 #AutoIt3Wrapper_Compile_Both=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ;AutoItSetOption ("WinTitleMatchMode", 2) ;       ;#NoTrayIcon ;         If WinExists('[CLASS:AutoIt v3;TITLE:' & @ScriptName & ']') Then MsgBox(48, @ScriptName, "     !"); ;             ;WinActivate('  ') Exit EndIf AutoItWinSetTitle(@ScriptName) #include <Array.au3> #include <_FileDirList.au3> ;  Local $msg_title = "Check File Exist 1.0" Local $path = @ScriptDir Local $soft_open_dir = "explorer.exe" Local $path, $dir_analyse, $words, $msg_open ;    if ($CmdLine[0] < 5) then MsgBox(0x10, $msg_title, "   !" & @CRLF & @CRLF & "  ") Exit else $dir_analyse = $CmdLine[1] $file = $CmdLine[2] $words0 = $CmdLine[3] $words1 = $CmdLine[4] if (StringCompare($CmdLine[5], "msg_on") = 0) then $msg_open = 1 elseif (StringCompare($CmdLine[5], "msg_off") = 0) then $msg_open = 0 else MsgBox(0x10, $msg_title, "     'msg_on'  'msg_off'!" & @CRLF & @CRLF & "  ") Exit endif endIf ;      $dir_arr = _FileDirList($dir_analyse, "*"&$file&"*", 1, 0, 0) ;_ArrayDisplay($dir_arr) ;      if ($dir_arr = 0) then if (StringCompare($words0, "0") <> 0) then if ($msg_open = 0) then MsgBox(0x41030, $msg_title, $words0) else if (MsgBox(0x41034, $msg_title, $words0 & @CRLF & @CRLF & "     ?")) = 6 then ShellExecuteWait($soft_open_dir, $dir_analyse) endif endif endif else if (StringCompare($words1, "0") <> 0) then if ($msg_open = 0) then MsgBox(0x41030, $msg_title, $words1) else if (MsgBox(0x41034, $msg_title, $words1 & @CRLF & @CRLF & "    ?")) = 6 then ShellExecuteWait($soft_open_dir, $dir_analyse) endif endif endif endif Exit 

بشكل أساسي ، يعد هذا البرنامج وظيفة log_analyser مبتورة قليلاً. يقوم البرنامج بتحليل المجلد المحدد (باستثناء المجلدات الفرعية) للملفات والأسماء التي تتطابق جزئيًا على الأقل مع كلمة البحث المحددة ويعرض رسالة حول نتيجة الفحص.

معلمات البرنامج:

1 - المسار الكامل للمجلد (بدون حرف الخط المائل - /)
2 - الكلمة الأساسية للبحث في أسماء الملفات أو اسم الملف الكامل
3 - سلسلة نصية يتم عرضها عند عدم العثور على الملف ، إذا = 0 - لا تعرض الرسالة
4 - نص الخط المعروض عند العثور على الملف ، إذا = 0 - لا تعرض رسالة
5 - إخراج الرسالة: msg_off - يتم عرض رسالة فقط حول وجود / غياب الملفات ، msg_on - في النافذة المعروضة ، يُقترح أيضًا فتح المجلد الذي يتم فيه اكتشاف الملفات أو عدم العثور عليها

الآن ، لهذا البرنامج قمت بإنشاء البرنامج النصي Check_LOG_from_log_analyser.bat ، الرابط الذي قمت بوضعه في المعتاد بدء تشغيل Windows:

 @set dir=%~dp0LOG start check_file_exist.exe %dir% .log 0 "     !" msg_on exit 

وبالتالي ، في النهاية حصلنا على حل مستقل تمامًا لا يعتمد على موقع مجلد المزامنة وسيعمل بشكل صحيح من أي مكان على جهاز الكمبيوتر الخاص بنا. الحل ليس قابلاً للتطبيق فحسب ، ولكنه مستقر أيضًا - على نظام التشغيل Windows 7 x64 ، عملت هذه المجموعة من البرامج النصية لمدة عام ولم تكن هناك أي مشاكل معها على الإطلاق.

ربما يبدو كل هذا الآن وحشيًا إلى حد ما ، ولكن لا يوجد شيء معقد بشأنه. إذا نظرت عن كثب إلى رمز AutoIt ، فإن البناء الأساسي هو الحلقات المعتادة إذا كان ذلك بعد ذلك من نفس النوع لأي لغة برمجة ، حيث يتم تعلم بعض مشغلي AutoIt والوظائف المتكررة ، والتي يتم تعلمها حرفياً في بضع أمسيات. لا يمكن حتى تدريس لغة البرمجة النصية BAT ، لأن معظم الحلول قياسية وتم وصفها منذ فترة طويلة على الإنترنت. إن القدرة على استخدام البرمجة ليست مثيرة للاهتمام فحسب ، بل يمكن أن تكون مفيدة جدًا.

قصيدة للرمز من Dark Dragon




خاتمة


وافترضت أن نكون صادقين ، لكنني لم أتوقع مثل هذا العدد من المقالات ، والتي كان علي أن أقضيها حتى خمسين ساعة. كقاعدة ، يتم تقليل تثبيت السحابة على الإنترنت إلى أقوال مثل: "نعم ، تحتاج إلى تنفيذ عدة أوامر هناك." هذا صحيح - التثبيت تافه. عندما تعرف ما هي الأوامر للدخول في وحدة التحكم وما تعنيه. عندما تفهم جوهر التوجيه على الشبكة. عندما يكون لديك بالفعل خادم يعمل وعندما تفهم كيفية إضافة مضيف إليه. عندما تعرف كيفية إعداد موقع. أي ، لتطبيق هذه الأوامر العديدة ، تحتاج إلى قدر معين من المعرفة والخبرة. الغرض من هذه المقالات الثلاثة هو محاولة لإنشاء مثل هذه الأمتعة من خلال جمع المعلومات الكافية اللازمة في مكان واحد وشرح كيفية استخدامها بشكل صحيح. آمل بصدقأن هذه السلسلة من المقالات ستساعد شخصًا ما على اتخاذ خطواته الواعية الأولى في عالم البرمجيات الحرة.



ارجع إلى البداية ، إلى جدول المحتويات .



تاريخ إنشاء سحابة منزلية. الجزء 3. إنشاء سحابة شخصية - تثبيت وتكوين Nextcloud.
نسخة نصية: 1.2.1.
تاريخ أول نشر: 02/08/2018.
آخر تعديل: 01/15/2020.

سجل التحديث
1.2.1 [15-01-2020]
.

1.2.0 [08-02-2018]
.

1.1.0 [08-02-2018]
.

1.0.0 [08-02-2018]
.
Nextcloud 11.0.2 VMWare, VMWare , Nextcloud.



معلومات لإدارة المورد (خطأ مشتبه فيه)
- (, code blockquote) :
[Definition]
failregex={«reqId»:".*",«remoteAddr»:".*",«app»:«core»,«message»:«Login failed: '.*' \(Remote IP: ''\)»,«level»:2,«time»:".*"}
ignoreregex =

! , .. . (/) — . :


— , « Nextcloud» , ,
— ,



Source: https://habr.com/ru/post/ar410011/


All Articles