分类 技术 下的文章

今天我们来学习一下如何在CentOS 7 Linux分布式系统中为Tomcat绑定IPv4。

Apache Tomcat 是由Apache 软件基金会 开发的开源web服务器和servlet容器。它实现了Java Servlet,JavaServer页面(JSP),Java的统一表达式语言,以及Sun Microsystems的Java的WebSocket规范,并提供了一个运行java代码的web服务器环境。

如果由于tomcat默认绑定到IPv6而导致我们的web服务器不能正常工作,就有必要将tomcat绑定到IPv4。众所周知,IPv6是为设备分配IP地址的现代方法,虽然在不久的将来也许会得到应用,但是现在并没有得到完全应用。由于没有用处,目前我们并不需要将我们的Tomcat服务器向IPv6转换,我们应该将其绑定到IPv4。

在开始将tomcat绑定到IPv4之前,我们应该确保在我们的CentOS 7中已经安装了tomcat。可以看这个如何在CentOS 7.0服务器中安装tomcat 8的指导。

1. 切换到tomcat用户

首先,我们要切换到 tomcat 用户。我们可以通过在shell或者终端中运行 su tomcat 命令完成。

# su tomcat

切换到tomcat用户

2. 找到文件 Catalina.sh

现在我们要进入Apache Tomcat安装目录下的bin文件夹,通常是 /usr/share/apache-tomcat-8.0.x/bin/, 这里的x是 Apache Tomcat发行版的子版本号。因为我的CentOS 7服务器中安装的版本是8.0.18,这里我的目录是 /usr/share/apache-tomcat-8.0.18/bin/。

$ cd /usr/share/apache-tomcat-8.0.18/bin

注意:请用你系统中安装的Apache Tomcat的版本号替换8.0.18。

在bin目录中,有一个名字是catalina.sh的脚本文件。这就是我们要编辑的文件,我们将在里面增加一行将tomcat绑定到IPv4的配置信息。你可以通过在shell或者终端中运行命令 ls 来查看这个文件。

$ ls

查找文件 catalina.sh

3. 配置 Catalina.sh

如图所示,我们将在catalina.sh脚本文件的最后增加一行 JAVA_OPTS= "$JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses"。我们可以使用我们喜欢的文本编辑器来编辑这个文件,例如nano、vim等等。这里我们使用nano。

$ nano catalina.sh

Catalina script

然后,如下图所示,将该行增加到文件。

配置 catalina

现在,我们已经将配置信息增加到文件中。保存文件并退出nano。

4. 重启

现在,我们通过重启tomcat服务器使配置生效。我们要先运行shutdown.sh,然后运行startup.sh。

$ ./shutdown.sh

运行可执行文件startup.sh:

$ ./startup.sh

重启apache tomcat 服务器

这将重启我们的tomcat服务器并加载将服务器绑定到IPv4的配置信息。

结尾

好了,我们终于将我们运行在CentOS 7 Linux发行版上的tomcat服务器绑定到IPv4上了。尽管IPv6在不久的将来也许会得到应用,但由于现在还没有使用,如果因为将你的Tomcat服务器绑定到IPv6上而使得你的tomcat服务器不工作,就有必要将tomcat绑定到IPv4上,这也很简单。如果你有任何疑问,建议,反馈,请在下面的评论框中写下来,让我们知道有什么需要增加或者改进。非常感谢!


via: http://linoxide.com/linux-how-to/bind-apache-tomcat-ipv4-centos/

作者:Arun Pyasi 译者:ictlyh 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

HTTP 严格传输安全(HSTS)是一种安全功能,web 服务器通过它来告诉浏览器仅用 HTTPS 来与之通讯,而不是使用 HTTP。本文会说明如何在 Apache2、Nginx 和 Lighttpd 上如何启用 HSTS。在主流的 web 服务器上测试通过: Nginx 1.1.19、 Lighttpd 1.4.28 和 Apache 2.2.22 ,环境为 Ubuntu 12.04、 Debian 6 & 7 和 CentOS 6,只需要调整部分参数就可以工作在其它的发行版上。

什么是 HTTP 严格传输安全?

引用自 Mozilla Developer Network:

如果一个 web 服务器支持 HTTP 访问,并将其重定向到 HTTPS 访问的话,那么访问者在重定向前的初始会话是非加密的。举个例子,比如访问者输入 http://www.foo.com/ 或直接输入 foo.com 时。

这就给了中间人攻击的一个机会,重定向可能会被破坏,从而定向到一个恶意站点而不是应该访问的加密页面。

HTTP 严格传输安全(HSTS)功能使 Web 服务器告知浏览器绝不使用 HTTP 访问,在浏览器端自动将所有到该站点的 HTTP 访问替换为 HTTPS 访问。

以下引自维基百科:

HSTS 可以用来抵御 SSL 剥离攻击。SSL 剥离攻击是中间人攻击的一种,由 Moxie Marlinspike 于2009年发明。他在当年的黑帽大会上发表的题为 “New Tricks For Defeating SSL In Practice” 的演讲中将这种攻击方式公开。SSL剥离的实施方法是阻止浏览器与服务器创建HTTPS连接。它的前提是用户很少直接在地址栏输入https://,用户总是通过点击链接或3xx重定向,从HTTP页面进入HTTPS页面。所以攻击者可以在用户访问HTTP页面时替换所有https://开头的链接为http://,达到阻止HTTPS的目的。

HSTS可以很大程度上解决SSL剥离攻击,因为只要浏览器曾经与服务器创建过一次安全连接,之后浏览器会强制使用HTTPS,即使链接被换成了HTTP。

另外,如果中间人使用自己的自签名证书来进行攻击,浏览器会给出警告,但是许多用户会忽略警告。HSTS解决了这一问题,一旦服务器发送了HSTS字段,用户将不再允许忽略警告。

场景举例:

当你通过一个无线路由器的免费 WiFi 访问你的网银时,很不幸的,这个免费 WiFi 也许就是由黑客的笔记本所提供的,他们会劫持你的原始请求,并将其重定向到克隆的网银站点,然后,你的所有的隐私数据都曝光在黑客眼下。

严格传输安全可以解决这个问题。如果你之前使用 HTTPS 访问过你的网银,而且网银的站点支持 HSTS,那么你的浏览器就知道应该只使用 HTTPS,无论你是否输入了 HTTPS。这样就防范了中间人劫持攻击。

注意,如果你之前没有使用 HTTPS 访问过该站点,那么 HSTS 是不奏效的。网站需要通过 HTTPS 协议告诉你的浏览器它支持 HSTS。

服务器开启 HSTS 的方法是,当客户端通过HTTPS发出请求时,在服务器返回的 HTTP 响应头中包含 Strict-Transport-Security 字段。非加密传输时设置的HSTS字段无效。

在 Apache2 中设置 HSTS

编辑你的 apache 配置文件(如 /etc/apache2/sites-enabled/website.conf 和 /etc/apache2/httpd.conf ),并加以下行到你的 HTTPS VirtualHost:

# Optionally load the headers module:
LoadModule headers_module modules/mod_headers.so

<VirtualHost 67.89.123.45:443>
    Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
</VirtualHost>

现在你的 web 站点在每次访问时都会发送该请求头,失效时间是两年(秒数)。这个失效时间每次都会设置为两年后,所以,明天你访问时,它会设置为明天的两年后。

你只能在 HTTPS 虚拟机中设置这个头,而不能设置在 HTTP 虚拟机中。

要将你的访问者重定向到对应 HTTPS 站点,可使用如下设置:

<VirtualHost *:80>
  [...]
  ServerName example.com
  Redirect permanent / https://example.com/
</VirtualHost>

如果仅仅是做重定向的话,甚至不需要设置 DocumentRoot。

你也可以使用 mod\_rewrite 来做重定向,但是上述的方式更简单更安全。不过,mod\_rewrite 可以重定向页面到对应的 HTTPS 页面,而上述配置则只重定向到“/”:

<VirtualHost *:80>
  [...]
  <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
  </IfModule>
</VirtualHost>

不要忘记重启 Apache。

Lighttpd

对于 lighttpd 来说很简单,将下述配置增加到你的 Lighttpd 配置文件(例如:/etc/lighttpd/lighttpd.conf):

server.modules += ( "mod_setenv" )
$HTTP["scheme"] == "https" {
    setenv.add-response-header  = ( "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload")
}

重启 Lighttpd。失效时间也是两年。

Nginx

Nginx 甚至更简单,将下述行添加到你的 HTTPS 配置的 server 块中:

add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

不要忘记重启 Nginx。

问题: 在Perl语言中,我需要转换易读的日期和时间到对应的UNIX时间戳,反之亦然。你可以给我一些将日期及时间转换到UNIX时间戳的Perl代码例子吗?或者相反,转换UNIX时间戳到可读的日期和时间。

当你的Perl脚本需要解决时间信息,这里有两种方法来表示和处理日期和时间。一种方法是易读的时间表示(例,"Sat Mar 14 10:14:05 EDT 2015"),另外一种是使用UNIX时间戳(也叫“新纪元时间”),这是从1970年1月1日到今所经过的时间秒数。每一种方法都有它自己的优劣势,取决于你的需要,也许也就需要转换一种格式到另一种。

Perl中转换本地时间到UNIX时间戳

为了从日期字符串中获得UNIX时间,可以使用Date::Parse模块中str2time()函数。此函数可以处理多种格式,例如:

  • Sat Mar 14 10:14:05 EDT 2015
  • 3/14/2015 10:14:05 -0400
  • 14/Mar/15 10:14:05
  • 14 Mar 15 10:14:05
use Date::Parse;

my $local_time = "Sat Mar 14 10:14:05 EDT 2015";

# 1426342445 will be stored in $unix_time
my $unix_time = str2time($local_time);

Date:Parse 模块支持多种语言(英语,法语,德语和意大利语)和时区。例如:

use Date::Parse;
use Date::Language;

my $lang = Date::Language->new('French');
my $unix_time = $lang->str2time("12:14:05, Ago 16, 2014 (CEST)");

Perl中UNIX时间戳到易读的日期和时间

如果你想要转换UNIX时间戳到易读的格式,可以使用localtime()函数,此函数可以转换UNIX时间戳为一个9元素列表。然后你可以使用返回的list构造任何你需要的可读格式。这里有一个代码片段:

# $sec, $min, $hour: 秒,分,时
# $mday: 月中的某天 (0-31)
# $mon: 月份,范围 0 (一月) 至 11 (十二月)
# $year: 年份,与1900年的差值(2015年为2015-1900=115)
# $wday: 星期,范围 0 (星期天) 至 6 (星期六)
# $yday: 年中的某天,范围 0 至 364 (或 365 闰年)
# $isdst: 是否是夏令时

my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($unix_timestamp);

# necessary conversion of $mon and $year
$mon += 1;
$year += 1900;

print "Current time: $year-$mon-$mday $hour:$min:$sec\n";

via: http://ask.xmodulo.com/convert-local-time-unix-timestamp-perl.html

作者:Dan Nanni 译者:VicYu/Vic020 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

提问:如何在Ubuntu上修复“Not Enough Free Disk Space On /boot”错误?

今天,当我在升级Lubuntu 14.04的时候遇到了下面这个错误,但是很简单。

“Not Enough Free Disk Space On /boot”

这是因为我的 /boot 分区被不再需要的旧内核与包塞满了。

回答:

我听说Ubuntu Tweak中的Computer Janitor功能可以删除不想要的垃圾文件。使用Computer Janitor,你可以将你的系统清理成像新安装的那样。Janitor会删除:

  • 程序缓存(Firefox/Chrome 缓存、软件中心缓存);
  • 略缩图缓存;
  • apt缓存;
  • 旧内核;
  • 包的配置;
  • 不再需要的包。

如果你还没有安装这个工具,参考下面的链接

要删除不需要的垃圾文件,打开Ubuntu Tweak,点击 Janitor 选项。

选择你想要删除的文件的选框,并点击 Clean 按钮。

Janitor现在就开始清理你的系统了。

真酷!系统清理完成了。

我重启启动了软件更新。这个没再遇到问题了。

就是这样。当然也有其他的方法可以清理系统。但是,这个方法很容易学。我们可以只点击几次鼠标就可以清理系统。

干杯!


via: http://www.unixmen.com/how-to-fix-not-enough-free-disk-space-on-boot-in-ubuntu/

作者:SK 译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

摘要:在一个基于Vagrant的本地环境中,可能是某个错误的原因,导致HHVM测试结果很差;在HHVM伙伴们协助下,该原因仍在研究中!然而,在DigitalOcean的一个4GB虚拟机中,HHVM甚至盖过了最新版的PHP-NG的风头!

结论:它们反映出HHVM的功效更佳(在JIT热启动后),虽然出于某些原因,我们不能在所有装备中获取这些结果。

如果你记得我们在几个月前写过一篇文章,那时WordPress 3.9表明是完全支持HHVM的,当时是那么令我们欢欣鼓舞。最初的基准测试结果显示,HHVM要比驱动着当前所有PHP构建的Zend引擎高级得多。后来,问题就出来了:

  • HHVM只能以单个用户运行,这意味着(在共享环境中)安全性差了
  • HHVM在崩溃后不会自动重启,而不幸的是,它至今仍然经常发生
  • HHVM在启动时使用大量内存,虽然,它和同规模的PHP-FPM比较,单个请求的内存使用量更低

很显然,你不得不根据你的(或者更确切地说是你的站点)的需求采取折中方案,然而这值得吗?切换到HHVM后,你期望获得多少性能改善呢?

在Kinsta,我们真的想要测试所有新技术,并通常会优化这一切来为我们的客户提供最佳的环境。今天,我最终花了点时间来配置测试环境并进行了一些测试来对比两个不同的构建,一个是全新出炉的WordPress安装,另外一个则添加了大量内容的WooCommerce!为了计量脚本的运行时间,我只是简单地添加了

<?php timer_stop(1); ?>

这一行到footer.php的/body标记前。

这里是配置环境的详情:

  • DigitalOcean 4GB 雨滴容器 (2 CPU核心, 4GB RAM)
  • Ubuntu 14.04, MariaDB10
  • 测试站点: 已导入演示内容的Munditia主题,WooCommerce 2.1.12 & WordPress 3.9.1
  • PHP 5.5.9, PHP 5.5.15, PHP 5.6.0 RC2, PHP-NG (20140718-git-6cc487d)和HHVM 3.2.0 (版本是PHP 5.6.99-hhvm)

没有进一步大费周章,这些就是我的测试结果,数值越低越好,以秒为单位:

DigitalOcean 4GB 雨滴容器

单位是秒,运行10次,越低越好

看起来似乎PHP-NG在它首次运行后就获得了峰值性能!HHVM需要更多几次重载,但是它们的性能貌似差不多!我等不及PHP-NG合并到开发主干了!:)

一分钟命中数,越高越好。

PHP 5.5.15禁用OpCache

  • 执行: 236 hits
  • 可用性: 100.00 %
  • 消耗时间: 59.03 secs
  • 传输的数据: 2.40 MB
  • 回应时间: 2.47 secs
  • 执行率: 4.00 trans/sec
  • 吞吐量: 0.04 MB/sec
  • 并发数: 9.87
  • 成功的执行: 236
  • 失败的执行: 0
  • 最长执行: 4.44
  • 最短执行: 0.48

PHP 5.5.15启用OpCache

  • 执行: 441 hits
  • 可用性: 100.00 %
  • 消耗时间: 59.55 secs
  • 传输的数据: 4.48 MB
  • 回应时间: 1.34 secs
  • 执行率: 7.41 trans/sec
  • 吞吐量: 0.08 MB/sec
  • 并发数: 9.91
  • 成功的执行: 441
  • 失败的执行: 0
  • 最长执行: 2.19
  • 最短执行: 0.64

PHP 5.6 RC2禁用OpCache

  • 执行: 207 hits
  • 可用性: 100.00 %
  • 消耗时间: 59.87 secs
  • 传输的数据: 2.10 MB
  • 回应时间: 2.80 secs
  • 执行率: 3.46 trans/sec
  • 吞吐量: 0.04 MB/sec
  • 并发数: 9.68
  • 成功的执行: 207
  • 失败的执行: 0
  • 最长执行: 3.65
  • 最短执行: 0.54

PHP 5.6 RC2启用OpCache

  • 执行: 412 hits
  • 可用性: 100.00 %
  • 消耗时间: 59.03 secs
  • 传输的数据: 4.18 MB
  • 回应时间: 1.42 secs
  • 执行率: 6.98 trans/sec
  • 吞吐量: 0.07 MB/sec
  • 并发数: 9.88
  • 成功的执行: 412
  • 失败的执行: 0
  • 最长执行: 1.93
  • 最短执行: 0.34

HHVM 3.2.0(版本是PHP 5.6.99-hhvm)

  • 执行: 955 hits
  • 可用性: 100.00 %
  • 消耗时间: 59.69 secs
  • 传输的数据: 9.18 MB
  • 回应时间: 0.62 secs
  • 执行率: 16.00 trans/sec
  • 吞吐量: 0.15 MB/sec
  • 并发数: 9.94
  • 成功的执行: 955
  • 失败的执行: 0
  • 最长执行: 0.85
  • 最短执行: 0.23

PHP-NG启用OpCache(构建: Jul 29 2014)

  • 执行: 849 hits
  • 可用性: 100.00 %
  • 消耗时间: 59.88 secs
  • 传输的数据: 8.63 MB
  • 回应时间: 0.70 secs
  • 执行率: 14.18 trans/sec
  • 吞吐量: 0.14 MB/sec
  • 并发数: 9.94
  • 成功的执行: 849
  • 失败的执行: 0
  • 最长执行: 1.06
  • 最短执行: 0.13

注意:这里节略了前一次的测试结果(有误),如感兴趣请访问原文查看。


via: https://kinsta.com/blog/real-world-wordpress-benchmarks-with-php5-5-php5-6-php-ng-and-hhvm/

作者:Mark Gavalda 译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

backupninja是Debian系统(以及基于Debian的发行版)中一个强大的、高度可配置的备份软件。在前一篇文章中,我们探讨了如何安装backupninja以及如何设置两个备份操作并执行。然而,那些只是冰山一角。这一次,我们要讨论如何定制 Handler 和 Helper ,使用这些功能定制策略以完成任何备份需要。

回顾 backupninja

backupninja的一个独特的地方是它可以完全抛弃/etc/backup.d中的纯文本配置文件和操作文件,软件自己会搞定。另外,我们可以编写自定义脚本(又叫 “handler”)放在/usr/share/backupninja 目录下来完成不同类型的备份操作。此外,可以通过ninjahelper的基于ncurses的交互式菜单(又叫“helper”)来指导我们创建一些配置文件,使得人工错误降到最低。

创建定制的Handler与Helper

这一节的目标是创建一个脚本,将home目录以gzip或bzip2压缩包的形式备份起来,不包括音乐与视频文件。我们将这个文件命名为home,将它放在/usr/backup/ninja目录下。

尽管你可以使用默认的tar handler(参考 /usr/share/backupninja/tar 与 /usr/share/backupninja/tar.helper)来达到这个效果,但是我们使用这种方法来展示如何创建实用的 handler 脚本与基于 ncurses 的 helper。你可以根据你的需求来决定如何运用这里的方法。

由于 handlers 来源于主脚本,所以无需以#!/bin/bash开始的释伴行(shebang line)。

我们编写的 handler (/usr/share/backupninja/home)如下所示。已经详细注释了。getconf 函数用来读取备份操作的配置文件。如果你指定了一个变量的值,那么它会覆盖配置文件中对应变量的值:

#/home 目录 handler 脚本

# 每个备份文件会通过 FQDN 来鉴别主机
getconf backupname

# 备份文件的保存目录
getconf backupdir

# 默认压缩
getconf compress

# 包含 /home 目录
getconf includes

#不包含 *.mp3 与 *.mp4 文件
getconf excludes

# 要打包备份文件的默认扩展名
getconf EXTENSION

# tar 程序的绝对路径
getconf TAR `which tar`

# date 程序的绝对路径
getconf DATE    `which date`

# 日期格式
DATEFORMAT="%Y-%m-%d"

# 如果备份目录不存在,以致命错误退出
if [ ! -d "$backupdir" ]
then
   mkdir -p "$backupdir" || fatal "Can not make directory $backupdir"
fi

# 如果备份目录不可写,同样以致命错误退出
if [ ! -w "$backupdir" ]
then
   fatal "Directory $backupdir is not writable"
fi

# 根据压缩格式选择对应的tar选项
case $compress in
   "gzip")
    compress_option="-z"
    EXTENSION="tar.gz"
    ;;
   "bzip")
    compress_option="-j"
    EXTENSION="tar.bz2"
    ;;
   "none")
    compress_option=""
    ;;
   *)
    warning "Unknown compress filter ($tar_compress)"
    compress_option=""
    EXTENSION="tar.gz"
    ;;
esac

# 不包含一些文件类型/目录
exclude_options=""
for i in $excludes
do
   exclude_options="$exclude_options --exclude $i"
done

# 调试信息,执行备份操作
debug "Running backup: " $TAR -c -p -v $compress_option $exclude_options \
   -f "$backupdir/$backupname-"`$DATE "+$DATEFORMAT"`".$EXTENSION" \
   $includes

# 将标准输出重定向到以.list为扩展的文件  
# 将标准错误输出重定向到以.err为扩展的文件
$TAR -c -p -v $compress_option $exclude_options \
   -f "$backupdir/$backupname-"`$DATE "+$DATEFORMAT"`".$EXTENSION" \
   $includes \
   > "$backupdir/$backupname-"`$DATE "+$DATEFORMAT"`.list \
   2> "$backupdir/$backupname-"`$DATE "+$DATEFORMAT"`.err

[ $? -ne 0 ] && fatal "Tar backup failed"

接下来我们将要创建helper文件(/usr/share/backupninja/home.helper)。这样,hendlers将会以菜单的形式在ninjahelper中显示:

# 备份操作描述,以下划线分割单词
HELPERS="$HELPERS home:backup_of_home_directories"

home_wizard() {
   home_title="Home action wizard"

   backupname=`hostname --fqdn`

# 指定备份操作的时间
   inputBox "$home_title" "When to run this action?" "everyday at 01"
   [ $? = 1 ] && return
   home_when_run="when = $REPLY"

# 指定备份文件名
   inputBox "$home_title" "\"Name\" of backups" "$backupname"
   [ $? = 1 ] && return
   home_backupname="backupname = $REPLY"
   backupname="$REPLY"

# 指定保存备份文件的默认路径
   inputBox "$home_title" "Directory where to store the backups" "/var/backups/home"
   [ $? = 1 ] && return
   home_backupdir="backupdir = $REPLY"

# 指定复选框的默认值
   radioBox "$home_title" "Compression" \
    "none"  "No compression" off \
    "gzip"  "Compress with gzip" on \
    "bzip"  "Compress with bzip" off
   [ $? = 1 ] && return;
   result="$REPLY"
   home_compress="compress = $REPLY "

   REPLY=
   while [ -z "$REPLY" ]; do
    formBegin "$home_title: Includes"
        formItem "Include:" /home/gacanepa
    formDisplay
    [ $? = 0 ] || return 1
    home_includes="includes = "
    for i in $REPLY; do
        [ -n "$i" ] && home_includes="$home_includes $i"
    done
   done

   REPLY=
   while [ -z "$REPLY" ]; do
    formBegin "$home_title: Excludes"
        formItem "Exclude:" *.mp3
        formItem "Exclude:" *.mp4
        # 按需增加多个“Exclude”文本框指定其他不须包含的内容
formItem "Exclude:"
        formItem "Exclude:"
    formDisplay
    [ $? = 0 ] || return 1
    home_excludes="excludes = "
    for i in $REPLY; do
        [ -n "$i" ] && home_excludes="$home_excludes $i"
    done
   done

# 保存配置
   get_next_filename $configdirectory/10.home
   cat > $next_filename <<EOF
$home_when_run
$home_backupname
$home_backupdir
$home_compress
$home_includes
$home_excludes

# tar 程序的路径,必须为GNU tar
TAR    `which tar`
DATE    `which date`
DATEFORMAT  "%Y-%m-%d"
EXTENSION    tar

EOF
# 将配置文件的权限改为600
   chmod 600 $next_filename
}

运行 ninjahelper

当创建了名为home的handler脚本以及对应的home.helper后,运行ninjahelper命令创建一个新的备份操作。

#ninjahelper

选择 create a new backup action(创建一个新的备份操作)。

接下来将看到可选的操作类型,这里选择“backup of home directories"(备份home目录):

然后会显示在helper中设置的默认值(这里只显示了3个)。可以编辑文本框中的值。注意,关于“when”变量的语法,参考文档的日程安排章节。

当完成备份操作的创建后,它会显示在ninjahelper的初始化菜单中:

按回车键显示这个备份操作的选项。因为它非常简单,所以我们可以随便对它进行一些实验。

注意,“run this action now"(立即运行)选项会不顾日程表安排的时间而立即进行备份操作:

备份操作会发生一些错误,debug会提供一些有用的信息以帮助你定位错误并纠正。例如,当备份操作有错误并且没有被纠正,那么当它运行时将会打印出如下所示的错误信息。

上面的图片告诉我们,用于完成备份操作的连接没有建立,因为它所需要链接的远程主机似乎宕机了。另外,在helper文件中指定的目标目录不存在。当纠正这些问题后,重新开始备份操作。

需要牢记的事情:

  • 当你在/usr/share/backupninja 下新建了一个自定义脚本(如foobar)来处理特殊的备份操作时,那么你还需要编写与之对应的helper(foobar.helper)文件,ninjahelper 将通过它生成名为10.foobar(下一个操作为11,以此类推)的文件,保存在/etc/backup.d目录下,而这个文件才是备份操作的真正的配置文件。
  • 可以通过ninjahelper设定好备份操作的执行时间,或按照“when”变量中设置的频率来执行。

总结

在这篇文章中,我们探讨了如何从头创建我们自己的备份操作,以及如何向ninjahelper添加相关的菜单以生成对应的配置文件。通过上一篇与这一篇文章,我希望我已经给出了足够好的理由让你继续研究,或者至少应该尝试一下。


via: http://xmodulo.com/create-custom-backup-plan-debian.html

作者:Gabriel Cánepa 译者:SPccman 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出