چگونه یک اسکریپت انتقال سفارشی برای بکاپ‌های cPanel & WHM ایجاد کنیم

در این مقاله، نحوهٔ طراحی و پیاده‌سازی یک اسکریپت انتقال (Custom Transport Script) برای سیستم بکاپ cPanel & WHM را یاد می‌گیرید. با استفاده از این اسکریپت می‌توانید بکاپ‌ها را به مقاصد سفارشی‌ای که به‌صورت پیش‌فرض در WHM وجود ندارند، منتقل کنید. این راهنما مخصوص کاربران حرفه‌ای است و ساختار اسکریپت، فرمان‌های لازم، نحوهٔ دریافت آرگومان‌ها، مدیریت خطا و نمونه کدهای Perl را به‌صورت عملی توضیح می‌دهد.

WHM custom backup scriptcPanel backup transportcustom backup destination

~5 min read • Updated Feb 15, 2026

چگونه یک اسکریپت انتقال (Transport Script) سفارشی برای بکاپ‌ها ایجاد کنیم


معتبر برای نسخه‌های 82 تا آخرین نسخه


نسخه: 82
آخرین ویرایش: 21 ژوئن 2021


Overview


هشدار: تنها کاربران حرفه‌ای باید اسکریپت انتقال سفارشی ایجاد کنند. سایر کاربران می‌توانند از گزینه‌های آمادهٔ WHM استفاده کنند:

  • دایرکتوری محلی
  • Amazon S3™
  • Backblaze B2
  • FTP
  • Google Drive™
  • Rsync
  • S3 Compatible
  • SFTP
  • WebDAV

ویژگی Backup Configuration به شما اجازه می‌دهد یک مقصد سفارشی برای بکاپ‌ها ایجاد کنید.


Create a custom transport script


اسکریپت انتقال سفارشی، اسکریپتی است که شما باید برای هر مقصد بکاپ سفارشی در WHM ایجاد کنید. مسیر کامل اسکریپت را در بخش Script هنگام انتخاب نوع مقصد Custom وارد می‌کنید.


Script operation


قوانین زیر نحوهٔ تعامل اسکریپت با سیستم را مشخص می‌کنند:

  • اسکریپت برای هر فرمان فقط یک بار اجرا می‌شود.
  • اسکریپت نمی‌تواند بین فرمان‌ها اطلاعات ذخیره کند.
  • اتصال بین فرمان‌ها حفظ نمی‌شود؛ هر بار اتصال جدید ایجاد و سپس قطع می‌شود.
  • آرگومان‌ها به ترتیب زیر به اسکریپت ارسال می‌شوند:
1. نام فرمان
2. دایرکتوری فعلی
3. پارامترهای مخصوص فرمان
4. Host
5. Username

رمز عبور از طریق متغیر محیطی PASSWORD ارسال می‌شود.


Script commands


اسکریپت باید فرمان‌های زیر را پیاده‌سازی کند:

CommandDescriptionParameters
chdir تغییر دایرکتوری در مقصد. $path
delete حذف یک فایل در مقصد. $path
get دانلود فایل از مقصد به سرور. $dest_root_dir, $dest_file, $local_file
ls لیست فایل‌ها (مشابه ls -l). $path
mkdir ایجاد دایرکتوری در مقصد. $path
put آپلود فایل از سرور به مقصد. $dest_root_dir, $dest_file, $local_file
rmdir حذف دایرکتوری به‌صورت بازگشتی. $path

هشدار: قبل از حذف، مسیر را بررسی کنید. حذف مسیر / باعث خرابی شدید سیستم می‌شود.


Templates


می‌توانید از فایل زیر به‌عنوان الگو استفاده کنید:

/usr/local/cpanel/scripts/custom_backup_destination.pl.skeleton

نمونهٔ آمادهٔ اسکریپت نیز در مسیر زیر موجود است:

/usr/local/cpanel/scripts/custom_backup_destination.pl.sample

Code examples


Use statements


use strict;
use warnings;
use Cwd qw(getcwd abs_path);
use File::Spec;
use File::Copy;
use File::Path qw(make_path remove_tree);
use autodie qw(:all copy);

The %commands list


my %commands = (
    put    => \&my_put,
    get    => \&my_get,
    ls     => \&my_ls,
    mkdir  => \&my_mkdir,
    chdir  => \&my_chdir,
    rmdir  => \&my_rmdir,
    delete => \&my_delete,
);

Argument handling


my ( $cmd, $local_dir, @args, $host, $user ) = @ARGV;
my $password = $ENV{'PASSWORD'};
usage() unless exists $commands{$cmd};

The put function


sub my_put {
    my ( $local, $remote, $host, $user ) = @_;
    my $password = $ENV{'PASSWORD'};

    $remote = convert_path($remote);

    my ( undef, $dir, undef ) = File::Spec->splitpath($remote);
    make_path($dir) unless ( $dir and -d $dir );

    copy( $local, $remote );
    return;
}

The get function


sub my_get {
    my ( $remote, $local, $host, $user ) = @_;
    my $password = $ENV{'PASSWORD'};

    $remote = convert_path($remote);
    copy( $remote, $local );
    return;
}

The ls function


sub my_ls {
    my ( $path, $host, $user ) = @_;
    my $password = $ENV{'PASSWORD'};

    $path = convert_path($path);
    my $ls = `ls -al $path`;
    $ls =~ s|^total[^\n]*\n||;

    print $ls;
    return;
}

The mkdir function


sub my_mkdir {
    my ( $path, $recurse, $host, $user ) = @_;
    my $password = $ENV{'PASSWORD'};

    $path = convert_path($path);
    make_path($path);

    die "Failed to create $path" unless -d $path;
    return;
}

The chdir function


sub my_chdir {
    my ( $path, $host, $user ) = @_;
    my $password = $ENV{'PASSWORD'};

    $path = convert_path($path);
    chdir $path;

    print get_sub_directory( getcwd() ) . "\n";
    return;
}

The rmdir function


sub my_rmdir {
    my ( $path, $host, $user ) = @_;
    my $password = $ENV{'PASSWORD'};

    $path = convert_path($path);
    remove_tree($path);

    die "$path still exists" if -d $path;
    return;
}

The delete function


sub my_delete {
    my ( $path, $host, $user ) = @_;
    my $password = $ENV{'PASSWORD'};

    $path = convert_path($path);
    unlink $path;
    return;
}

Basic error check


usage() if ( @ARGV < 2 );

sub usage {
    my @cmds = sort keys %commands;
    print STDERR "This script is for implementing a custom backup destination\n";
    print STDERR "It requires the following arguments: cmd, local_dir, cmd_args\n";
    print STDERR "Valid commands: @cmds\n";
    exit 1;
}

Execute the command

$commands{$cmd}->(@args);

Conclusion


اسکریپت‌های انتقال سفارشی به کاربران حرفه‌ای اجازه می‌دهند بکاپ‌ها را به هر مقصد دلخواه ارسال کنند. با رعایت ساختار و پیاده‌سازی تمام فرمان‌های لازم، می‌توانید هر نوع فضای ذخیره‌سازی را با سیستم بکاپ WHM یکپارچه کنید.


Written & researched by Dr. Shahin Siami