~5 دقیقه مطالعه • بروزرسانی ۲۶ بهمن ۱۴۰۴
چگونه یک اسکریپت انتقال (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
اسکریپت باید فرمانهای زیر را پیادهسازی کند:
| Command | Description | Parameters |
|---|---|---|
| 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.sampleCode 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 یکپارچه کنید.
نوشته و پژوهش شده توسط دکتر شاهین صیامی