# نسخ النسخ الاحتياطية إلى خادم آخر باستخدام rsync و cron

**URL:** <https://meta.discourse.org/t/copy-backups-to-another-server-with-rsync-and-cron/124346>\
**Category:** Sysadmins\
**Tags:** how-to\
**Created:** [30 يوليو 2019، 1:17ص UTC](https://meta.discourse.org/t/copy-backups-to-another-server-with-rsync-and-cron/124346 "2019-07-30T01:17:44Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![johncs](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/johncs/32/135871_2.png) [@johncs](https://meta.discourse.org/u/johncs)\
**Post date:** [30 يوليو 2019، 1:17ص UTC](https://meta.discourse.org/t/copy-backups-to-another-server-with-rsync-and-cron/124346/1 "2019-07-30T01:17:44Z")

</div>

لدي خادم نسخ احتياطي ينسق عمليات النسخ الاحتياطي عبر العديد من الخوادم. أريد أن يقوم خادم النسخ الاحتياطي هذا بجلب نسخ احتياطية من Discourse من خادم المنتدى الخاص بي.

فكرت في كيفية السماح لخادم النسخ الاحتياطي بالوصول إلى ملفات النسخ الاحتياطي على خادم المنتدى. أفضل طريقة استطعت التوصل إليها هي السماح بالوصول عن بُعد باسم مستخدم `www-data` (الذي يملك نسخ Discourse الاحتياطية).

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

على أي حال، إليك كيفية تنفيذ ذلك.

# السماح بالوصول عن بُعد باسم مستخدم www-data

1. عدّل الملف `/etc/passwd` واستبدل غلاف (shell) مستخدم `www-data` بـ `/bin/bash` بدلاً من `/usr/sbin/nologin`.
2. عدّل الملف `/etc/passwd` مرة أخرى واستبدل الدليل الرئيسي (home directory) الخاص بـ `www-data` بـ `/home/www-data` بدلاً من `/var/www` (اختياري، لكنه يبدو لي مناسبًا).
3. أضف مفتاح SSH الخاص بخادم النسخ الاحتياطي إلى `/home/www-data/.ssh/authorized_keys`.

# rsync

أخيرًا، على خادم النسخ الاحتياطي، أضفت أمر cron كل ساعة يقوم بتشغيل السكربت التالي:

```plaintext
#!/usr/bin/env bash

set -xe

HOST="$1"
DIR="$2"
if [-z "$HOST"] || [! -d "$DIR"]; then
	echo "$0 HOST DIR"
	exit 1
fi

# --ignore-existing سيجعل rsync يتجاهل أي نسخ احتياطية تم نسخها بالفعل.
# --delay-updates يضمن أن تصل إلى $DIR فقط النسخ الاحتياطية المكتملة. إذا لم
# يتم تحديد هذا الخيار، فقد تنتهي نسخ احتياطية جزئية في $DIR، وبما أن
# --ignore-existing لن يقوم بأي نوع من فحص المساواة، فلن يتم تصحيح المشكلة
# أو اكتشافها.
rsync --ignore-existing --delay-updates "$HOST:/var/discourse/shared/standalone/backups/default/*" "$DIR"

```

أتمنى أن يثبت هذا المفيدًا لشخص ما هناك.

---

_[View the full topic](https://meta.discourse.org/t/copy-backups-to-another-server-with-rsync-and-cron/124346)._
