{"id":1667,"date":"2023-11-29T15:28:05","date_gmt":"2023-11-29T14:28:05","guid":{"rendered":"https:\/\/digital-cleaning.de\/?p=1667"},"modified":"2024-10-28T00:41:13","modified_gmt":"2024-10-27T23:41:13","slug":"paperless-ngx-teil-8-exportfunktion-nutzen","status":"publish","type":"post","link":"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-8-exportfunktion-nutzen\/","title":{"rendered":"Paperless-ngx, Teil 8: Exportfunktion nutzen"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"336\" src=\"https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_1-1024x336.png\" alt=\"\" class=\"wp-image-1668\" srcset=\"https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_1-1024x336.png 1024w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_1-300x98.png 300w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_1-768x252.png 768w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_1-1536x504.png 1536w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_1-2048x672.png 2048w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_1-1140x374.png 1140w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p>Paperless-ngx l\u00e4uft rund und macht, was es soll? Prima! Dann wird es Zeit, sich \u00fcber Backup-Strategien Gedanken zu machen. Schlie\u00dflich wurde viel Arbeit in den Aufbau und die Organisation der Unterlagen gesteckt &#8211; das soll nicht alles &#8222;weg&#8220; sein, wenn der Sohnemann mit seinem Lego-Laster ein Regal umwirft oder Blitz die Elektrik zum Erliegen bringt. Heute soll es um den ersten Schritt einer umfassenden Backup-Strategie gehen. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Umfangreiche Exportfunktion nutzen<\/h2>\n\n\n\n<p>Bei dem Wort &#8222;Export&#8220; denkt man zun\u00e4chst nur an das Speichern der Dokumente. Die Funktion, die Paperless-ngx eingebaut hat, ist aber viel umfangreicher: Datenbankinhalte, Metadaten, Einstellungen, Nutzer-Accounts &#8211; sogar Passw\u00f6rter f\u00fcr die einzelnen Account: all dies wird mit einem einzigen Befehl gesichert. Mehr noch: Paperless-ngx \u00fcberpr\u00fcft auch \u00c4nderungen zum letzten durchgef\u00fchrten Export und passt die Sicherung entsprechend an. Und noch mehr: Die Sicherung kann auf ein anderes Ger\u00e4t \u00fcbertragen werden. Wenn dort ebenfalls Paperless-ngx installiert ist, so hat man &#8211; nach einem kurzen Import &#8211; auch in dieser anderen Installation ein 1:1-Abbild seines Archivs. <\/p>\n\n\n\n<p>Mit anderen Worten, man muss sich keine Gedanken um irgendwelche (Docker-)Pfade, Datenbanken usw. usw. machen. Man f\u00fchrt den Befehl aus, wartet ein paar Sekunden und hat &#8211; je nach Einstellung &#8211; alles in einem ZIP-Archiv oder auf einem Export-Pfad liegen.  <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1 Zeile gen\u00fcgt<\/h3>\n\n\n\n<p>Zun\u00e4chst wird die Kommandozeile aufgerufen. Dann hangelt man sich zu seinem Paperless-ngx-Ordner hin, also z.B. <\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"cd \/home\/pi\/paperless-ngx\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">cd<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">\/home\/pi\/paperless-ngx<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Dort f\u00fcgt man den Export-Befehl ein:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"sudo docker-compose exec webserver document_exporter ..\/export\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">sudo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">docker-compose<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">exec<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">webserver<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">document_exporter<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">..\/export<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Jetzt ein paar Sekunden warten &#8211; danach wurde ein Unterpfad &#8222;export&#8220; mit allen Dateien angelegt.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"741\" src=\"https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_2-1024x741.png\" alt=\"\" class=\"wp-image-1669\" style=\"width:738px;height:auto\" srcset=\"https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_2-1024x741.png 1024w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_2-300x217.png 300w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_2-768x555.png 768w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_2-1536x1111.png 1536w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_2-1140x825.png 1140w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_2.png 1814w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">(Screenshot von Benutzer &#8222;a&#8220; &#8211; im Text verwende ich den Standardnutzer &#8222;pi&#8220;.)<\/figcaption><\/figure><\/div>\n\n\n<p>Neben den Datenbank-Eintr\u00e4gen (1) sind damit auch die Vorschau-Bilder (2), die Archiv-Version (3) und die Original-Version (4) des Dokuments gespeichert. <\/p>\n\n\n\n<p>Mit dem zus\u00e4tzlichen Parameter &#8222;-z&#8220; am Ende der Zeile wird von Paperless-ngx alles in ein ZIP-Archiv gepackt:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_3.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"715\" src=\"https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_3-1024x715.png\" alt=\"\" class=\"wp-image-1670\" style=\"width:500px;height:auto\" srcset=\"https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_3-1024x715.png 1024w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_3-300x210.png 300w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_3-768x536.png 768w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_3-1140x796.png 1140w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_3.png 1287w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">Hinweise f\u00fcr den Import<\/h3>\n\n\n\n<p>M\u00f6chte man sp\u00e4ter die Dokumente in eine Neu-Installation von Paperless-ngx aufnehmen oder zieht man beispielsweise vom Raspberry Pi zu einem Synology-NAS um, so gibt man auf dem Paperless-ngx-Pfad fast den gleichen Befehl ein:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"sudo docker-compose exec webserver document_importer ..\/export\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">sudo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">docker-compose<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">exec<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">webserver<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">document_importer<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">..\/export<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Nat\u00fcrlich m\u00fcssen zuvor die gesicherten Dateien in den Unterpfad &#8222;export&#8220; kopiert werden.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"sudo docker-compose exec webserver document_exporter ..\/export -z\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">sudo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">docker-compose<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">exec<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">webserver<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">document_exporter<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">..\/export<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-z<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Vorgehen bei Versions-Updates<\/h3>\n\n\n\n<p>Das beschriebene Vorgehen klappt problemlos, sofern es sich um die gleiche Paperless-ngx-Version handelt. Aktuell wird gerade Version 2 ausgerollt. Hat man ein regul\u00e4res Update von der vorherigen Version (1.17.4) vorgenommen, so wurden automatisch alle Daten \u00fcbernommen und angepasst. Anschlie\u00dfend kann man mit diesen Dokumenten einen Export vornehmen und ist damit w\u00e4hrend der 2-er-Generation auf der sicheren Seite. War kein regul\u00e4res Update mit vorhandenen Daten m\u00f6glich, so sollte man zun\u00e4chst die \u00e4ltere Paperless-ngx-Version installieren (hier also 1.17.4). Danach die Dateien auf dem Export-Pfad importieren. Und dann erst das Update von 1.17.4 auf 2 vornehmen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Zeitsteuerung f\u00fcr den Export einrichten (Cronjob)<\/h2>\n\n\n\n<p>Wenn das vollst\u00e4ndige Archiv erstmalig gesichert wurde, muss man danach nicht st\u00e4ndig den Export anwerfen. Oft wandern die Woche nur 2 bis 10 neue Dokumente ins Archiv &#8211; dann gen\u00fcgt es, wenn man beispielsweise auf der Todoliste einen Eintrag hat &#8222;Freitag, 15:00 Uhr, Export, w\u00f6chentlich&#8220; eintr\u00e4gt. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><a href=\"https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_4.png\"><img loading=\"lazy\" decoding=\"async\" width=\"858\" height=\"294\" src=\"https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_4.png\" alt=\"\" class=\"wp-image-1671\" style=\"width:506px;height:auto\" srcset=\"https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_4.png 858w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_4-300x103.png 300w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_4-768x263.png 768w\" sizes=\"auto, (max-width: 858px) 100vw, 858px\" \/><\/a><\/figure><\/div>\n\n\n<p>Oder man nutzt f\u00fcr den Befehl das Texterweiterungstool Espanso, \u00fcber das ich in einem <strong><a href=\"https:\/\/digital-cleaning.de\/index.php\/espanso-textexpander-fuer-flotte-texte-win-mac-linux\/\" data-type=\"link\" data-id=\"https:\/\/digital-cleaning.de\/index.php\/espanso-textexpander-fuer-flotte-texte-win-mac-linux\/\">fr\u00fcheren Artikel <\/a><\/strong>berichtet habe.<\/p>\n\n\n\n<p>Eleganter ist es nat\u00fcrlich, wenn unser kleiner Raspberry Pi die Arbeit f\u00fcr uns erledigt. Dazu richten wir einen &#8222;Cronjob&#8220; ein. Damit wird der Export z.B. immer nachts um 4:00 Uhr durchgef\u00fchrt, w\u00e4hrend wir noch schlummern.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Vorarbeit: Export-Befehl in Datei schreiben<\/h3>\n\n\n\n<p>Ein kleines Skript nimmt die Befehle auf, die wir sonst mit der Hand eingeben. Keine Sorge &#8211; das ist in 20 Sekunden erledigt. Der Name der Skript-Datei ist gleichg\u00fcltig, im Beispiel nennen wir sie &#8222;ex.sh&#8220;. Die wird \u00fcber den Texteditor Nano erzeugt. Also: Kommandozeile aufrufen und &#8222;nano ex.sh&#8220; eingeben:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"nano ex.sh\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">nano<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">ex.sh<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Jetzt \u00f6ffnet sich eine leere Datei. Die erste Zeile beginnt bei solchen Skripten immer mit &#8222;#!\/bin\/bash&#8220; &#8211; danach werden die oben erw\u00e4hnten Befehle eingetragen: <\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"#!\/bin\/bash\ncd \/home\/pi\/paperless-ngx\nsudo docker-compose exec -T webserver document_exporter ..\/export -z\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\">#!\/bin\/bash<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">cd<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">\/home\/pi\/paperless-ngx<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">sudo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">docker-compose<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">exec<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-T<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">webserver<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">document_exporter<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">..\/export<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-z<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>So sieht die Datei im Nano-Editor aus:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_5.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"394\" src=\"https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_5-1024x394.png\" alt=\"\" class=\"wp-image-1672\" style=\"width:624px;height:auto\" srcset=\"https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_5-1024x394.png 1024w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_5-300x116.png 300w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_5-768x296.png 768w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_5-1140x439.png 1140w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_5.png 1446w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><\/div>\n\n\n<p>Gespeichert wird mit &#8222;Strg + O&#8220;, Dateinamen best\u00e4tigen, &#8222;Strg + X&#8220; f\u00fcr das Schlie\u00dfen des Editors.<\/p>\n\n\n\n<p>Das Skript muss nun noch als ausf\u00fchrbare Datei gekennzeichnet werden. Das geschieht mit diesem Befehl:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"chmod +x ex.sh\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">chmod<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">+x<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">ex.sh<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Cronjob anlegen<\/h3>\n\n\n\n<p>Die eben erzeugte Datei starten wir \u00fcber einen Cronjob. Hier kommt wieder der Texteditor Nano ins Spiel. Zun\u00e4chst auf der Kommandozeile eingeben<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"crontab -e\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">crontab<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-e<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Falls bisher noch von keinem anderen Programm ein Cronjob eingetragen wurde, erfolgt kurz eine Abfrage, ob man Nano verwenden m\u00f6chte &#8211; die angezeigt Ziffer (in der Regel &#8222;1&#8220;) eingeben. Es muss nun nur eine einzige Zeile eingetragen werden. Diese besteht aus der Zeitangabe und dem Aufruf unserer vorher angelegten Skript-Datei. Die Art der Zeitangabe erkl\u00e4re ich gleich n\u00e4her, aber hier direkt mal ein Beispiel:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_6.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"481\" src=\"https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_6-1024x481.png\" alt=\"\" class=\"wp-image-1673\" style=\"width:734px;height:auto\" srcset=\"https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_6-1024x481.png 1024w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_6-300x141.png 300w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_6-768x361.png 768w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_6-1140x535.png 1140w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_6.png 1184w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Hinweis: Im Screenshot ist &#8222;* 4 * * *&#8220; zu sehen, korrekt ist &#8222;0 4 * * *&#8220;.<\/figcaption><\/figure><\/div>\n\n\n<p>Mit der Zeile &#8222;0 4 * * * \/home\/pi\/ex.sh&#8220; wird der Export von Paperless-ngx t\u00e4glich morgens um 4:00 Uhr ausgef\u00fchrt. Aber da man ja neugierig ist, ob alles klappt, richten wir kurz eine &#8222;1-Minuten-Sicherung&#8220; ein. Daf\u00fcr werden als Zeitangabe 5 Sternchen mit Leerraum gesetzt, also:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"* * * * * \/home\/pi\/ex.sh\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> \/home\/pi\/ex.sh<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Wieder mit Strg-O\/Dateinamen best\u00e4tigen\/Strg-X speichern und beenden.<\/p>\n\n\n\n<p>Nun mit dem Dateimanager den Export-Pfad aufrufen und schauen, ob da nach einer Minute die Export-Datei generiert wird. Wenn alles korrekt ist, so wird die Datei angelegt und erh\u00e4lt min\u00fctlich eine neue Version. Das ist nat\u00fcrlich \u00fcberfl\u00fcssig, daher noch einmal mit &#8222;crontab -e&#8220; die Zeitsteuerung aufrufen. Und jetzt jene Sicherungsabst\u00e4nde eintragen, die man haben m\u00f6chte.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Zeiteintrag bestimmen<\/h3>\n\n\n\n<p>Die f\u00fcnf Punkte stehen f\u00fcr &#8222;Minute&#8220;, &#8222;Stunde&#8220;, &#8222;Tag des Monats&#8220;, &#8222;Monat&#8220; und &#8222;Wochentag&#8220;. Das klingt kompliziert, man hat den Bogen aber rasch raus. Ich \u00fcbernehme hier einfach das Beispiel von <a href=\"https:\/\/de.wikipedia.org\/wiki\/Cron\" data-type=\"link\" data-id=\"https:\/\/de.wikipedia.org\/wiki\/Cron\">Wikipedia<\/a>:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><a href=\"https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_7.png\"><img loading=\"lazy\" decoding=\"async\" width=\"802\" height=\"328\" src=\"https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_7.png\" alt=\"\" class=\"wp-image-1674\" style=\"width:454px;height:auto\" srcset=\"https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_7.png 802w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_7-300x123.png 300w, https:\/\/digital-cleaning.de\/wp-content\/uploads\/2023\/11\/paperless9_7-768x314.png 768w\" sizes=\"auto, (max-width: 802px) 100vw, 802px\" \/><\/a><figcaption class=\"wp-element-caption\">Aufbau der Zeitangabe<\/figcaption><\/figure><\/div>\n\n\n<p>F\u00fcr die Ausf\u00fchrung an jedem Samstag um 23:45 Uhr muss der Vorspann also lauten:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"45 23 * * 6 \/home\/pi\/ex.sh\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">45<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">23<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">6<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">\/home\/pi\/ex.sh<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Mit einem &#8222;\/&#8220; an der jeweiligen Stelle kann eine Angabe wie &#8222;f\u00fchre alle x Minuten oder Stunden etwas aus. Also etwa &#8222;\/10 * * * *&#8220; f\u00fcr &#8222;alle 10 Minuten oder &#8222;* \/6 * * *&#8220; f\u00fcr &#8222;alle 6 Stunden&#8220;.<\/p>\n\n\n\n<p>4 Uhr morgens ist eine gute Zeit, denn der Vorschlag in der n\u00e4chsten Folge wird sein, um 4:30 Uhr \u00fcber ein anderes Tool eine verschl\u00fcsselte Komplettsicherung einzurichten. Die zeitliche Automatisierung wird dabei von dem Backup-Tool vorgenommen &#8211; wir m\u00fcssen also keine weiteren Cronjobs mehr &#8222;von Hand&#8220; anlegen.<\/p>\n\n\n\n<p><strong>Bisherige Teile der Paperless-ngx-Serie:<\/strong><\/p>\n\n\n\n<p>Teil 1: <strong><a href=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-auf-dem-raspberry-pi-erstaunlich-gut-teil-1\/\">Ausf\u00fchrlicher \u00dcberblick<\/a><\/strong><br>Teil 2: <strong><a href=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-2-suche-tags\/\">Suche &amp; Tags<\/a><\/strong><br>Teil 3: <strong><a href=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-3-consume-der-laub-sauger-fur-dokumente\/\">consume-Ordner &#8211; Einsatz von Scannern<\/a><\/strong><br>Teil 4: <a href=\"https:\/\/digital-cleaning.de\/?p=1600\"><strong>Speicherpfade konfigurieren<\/strong><\/a><br>Teil 5: <a href=\"https:\/\/digital-cleaning.de\/?p=1623\"><strong>Installation auf dem Raspberry Pi<\/strong><\/a><br>Teil 6: <strong><a href=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-6-neue-funktionen-in-version-2\/\" data-type=\"link\" data-id=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-6-neue-funktionen-in-version-2\/\">Neue Funktionen in Version 2<\/a><\/strong><br>Teil 7: <strong><a href=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-7-dokumente-unterwegs-ueber-das-eigene-modem-abrufen\/\" data-type=\"link\" data-id=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-7-dokumente-unterwegs-ueber-das-eigene-modem-abrufen\/\">Dokumente unterwegs \u00fcber das eigene Modem abrufen<\/a><\/strong><br>Teil 8: <strong><a href=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-8-exportfunktion-nutzen\/\" data-type=\"link\" data-id=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-8-exportfunktion-nutzen\/\">Exportfunktion nutzen<\/a><\/strong><br>Teil 9: <strong><a href=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-9-update-durchfuehren\/\" data-type=\"link\" data-id=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-9-update-durchfuehren\/\">Update durchf\u00fchren<\/a><\/strong><br>Teil 10: <strong><a href=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-10-das-rundum-sorglos-backup\/\" data-type=\"link\" data-id=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-10-das-rundum-sorglos-backup\/\">Das Rundum-sorglos-Backup<\/a><\/strong><br>Teil 11: <strong><a href=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-11-mail-abruf-mit-vielen-extras\/\" data-type=\"link\" data-id=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-11-mail-abruf-mit-vielen-extras\/\">Mail-Abruf mit vielen Extras<\/a><\/strong><br>Teil 12: <strong><a href=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-12-mein-alltag-mit-paperless-ngx\/\" data-type=\"link\" data-id=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-12-mein-alltag-mit-paperless-ngx\/\">Mein Alltag mit Paperless-ngx<\/a><\/strong><br>Teil 13: <strong><a href=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-13-ein-quanten-code-fuer-das-papier-archiv\/\" data-type=\"link\" data-id=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-13-ein-quanten-code-fuer-das-papier-archiv\/\">Ein Quanten-Code f\u00fcr das Papier-Archiv<\/a><\/strong><br>Teil 14: <strong><a href=\"https:\/\/digital-cleaning.de\/?p=1819\">Automatisierte Ablage auf Speicherpfaden<\/a><\/strong><br>Teil 15: <strong><a href=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-15-neue-funktion-fuer-das-verbinden-und-trennen-von-dokumenten\/\" data-type=\"link\" data-id=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-15-neue-funktion-fuer-das-verbinden-und-trennen-von-dokumenten\/\">Neue Funktion f\u00fcr das Verbinden und Trennen von Dokumenten<\/a><\/strong><br>Teil 16: <a href=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-16-dashboard-smarte-widgets-und-erweiterte-ansichten\/\"><strong>Dashboard, smarte Widgets und erweiterte Ansichten<\/strong><\/a><br>Teil 17: <strong><a href=\"https:\/\/digital-cleaning.de\/?p=2105\">Unterordner des consume-Verzeichnisses nutzen<\/a><\/strong><br>Teil 18: <a href=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-18-synology-nas-ohne-docker-nutzen\/\"><strong>Paperless-ngx auf Synology\/NAS ohne Docker nutzen<\/strong><\/a><br>Teil 19: <a href=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-19-praxisbeispiel-kleine-hausverwaltung\/\" data-type=\"post\" data-id=\"2648\"><strong>Praxisbeispiel \u2013 kleine Hausverwaltung<\/strong><\/a><br>Teil 20: <a href=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-20-dokumente-per-mail-aus-dem-heimnetz-versenden\/\" data-type=\"link\" data-id=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-20-dokumente-per-mail-aus-dem-heimnetz-versenden\/\u2197\"><strong>Dokumente per Mail aus dem Heimnetz versenden<\/strong><\/a><br>Teil 21: <strong><a href=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-21-die-1-klick-sicherung-mit-allem-drum-und-dran\/\">Die 1-Klick-Sicherung mit allem Drum und Dran<\/a><\/strong><br>Teil 22: <strong><a href=\"https:\/\/digital-cleaning.de\/?p=2911\" data-type=\"link\" data-id=\"https:\/\/digital-cleaning.de\/?p=2911\">Update der Datenbank &#8211; super-simpel<\/a><\/strong><br>Teil 23: <strong><a href=\"https:\/\/digital-cleaning.de\/?p=2962\">Neuer PDF-Editor<\/a><\/strong><br>Teil 24: <strong><a href=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-24-sofortinstallation\/\">Der Mega-All-in-One-Befehl f\u00fcr die Sofortinstallation<\/a><\/strong><br>Teil 25: <strong><a href=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-25-der-briefmarken-pc\/\" data-type=\"link\" data-id=\"https:\/\/digital-cleaning.de\/index.php\/paperless-ngx-teil-25-der-briefmarken-pc\/\">Der Briefmarken-PC f\u00fcr die Weitergabe<\/a><\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Paperless-ngx l\u00e4uft rund und macht, was es soll? Prima! Dann wird es Zeit, sich \u00fcber Backup-Strategien Gedanken zu machen. Schlie\u00dflich wurde viel Arbeit in den Aufbau und die Organisation der Unterlagen gesteckt &#8211; das soll nicht alles &#8222;weg&#8220; sein, wenn der Sohnemann mit seinem Lego-Laster ein Regal umwirft oder Blitz die Elektrik zum Erliegen bringt. Heute soll es um den ersten Schritt einer umfassenden Backup-Strategie gehen. Umfangreiche Exportfunktion nutzen Bei dem Wort &#8222;Export&#8220; denkt man zun\u00e4chst nur an das Speichern der Dokumente. Die Funktion, die Paperless-ngx eingebaut hat, ist aber viel umfangreicher: Datenbankinhalte, Metadaten, Einstellungen, Nutzer-Accounts &#8211; sogar Passw\u00f6rter f\u00fcr die einzelnen Account: all dies wird mit einem einzigen Befehl gesichert. Mehr noch: Paperless-ngx \u00fcberpr\u00fcft auch \u00c4nderungen zum letzten durchgef\u00fchrten Export und passt die Sicherung entsprechend an. Und noch mehr: Die Sicherung kann auf ein anderes Ger\u00e4t \u00fcbertragen werden. Wenn dort ebenfalls Paperless-ngx installiert ist, so hat man &#8211; nach einem kurzen Import &#8211; auch in dieser anderen Installation ein 1:1-Abbild seines Archivs. Mit anderen Worten, man muss sich keine Gedanken um irgendwelche (Docker-)Pfade, Datenbanken usw. usw. machen. Man f\u00fchrt den Befehl aus, wartet ein paar Sekunden und hat &#8211; je nach Einstellung &#8211; alles in einem ZIP-Archiv oder auf einem Export-Pfad liegen. 1 Zeile gen\u00fcgt Zun\u00e4chst wird die Kommandozeile aufgerufen. Dann hangelt man sich zu seinem Paperless-ngx-Ordner hin, also z.B. Dort f\u00fcgt man den Export-Befehl ein: Jetzt ein paar Sekunden warten &#8211; danach wurde ein Unterpfad &#8222;export&#8220; mit allen Dateien angelegt. Neben den Datenbank-Eintr\u00e4gen (1) sind damit auch die Vorschau-Bilder (2), die Archiv-Version (3) und die Original-Version (4) des Dokuments gespeichert. Mit dem zus\u00e4tzlichen Parameter &#8222;-z&#8220; am Ende der Zeile wird von Paperless-ngx alles in ein ZIP-Archiv gepackt: Hinweise f\u00fcr den Import M\u00f6chte man sp\u00e4ter die Dokumente in eine Neu-Installation von Paperless-ngx aufnehmen oder zieht man beispielsweise vom Raspberry Pi zu einem Synology-NAS um, so gibt man auf dem Paperless-ngx-Pfad fast den gleichen Befehl ein: Nat\u00fcrlich m\u00fcssen zuvor die gesicherten Dateien in den Unterpfad &#8222;export&#8220; kopiert werden. Vorgehen bei Versions-Updates Das beschriebene Vorgehen klappt problemlos, sofern es sich um die gleiche Paperless-ngx-Version handelt. Aktuell wird gerade Version 2 ausgerollt. Hat man ein regul\u00e4res Update von der vorherigen Version (1.17.4) vorgenommen, so wurden automatisch alle Daten \u00fcbernommen und angepasst. Anschlie\u00dfend kann man mit diesen Dokumenten einen Export vornehmen und ist damit w\u00e4hrend der 2-er-Generation auf der sicheren Seite. War kein regul\u00e4res Update mit vorhandenen Daten m\u00f6glich, so sollte man zun\u00e4chst die \u00e4ltere Paperless-ngx-Version installieren (hier also 1.17.4). Danach die Dateien auf dem Export-Pfad importieren. Und dann erst das Update von 1.17.4 auf 2 vornehmen. Zeitsteuerung f\u00fcr den Export einrichten (Cronjob) Wenn das vollst\u00e4ndige Archiv erstmalig gesichert wurde, muss man danach nicht st\u00e4ndig den Export anwerfen. Oft wandern die Woche nur 2 bis 10 neue Dokumente ins Archiv &#8211; dann gen\u00fcgt es, wenn man beispielsweise auf der Todoliste einen Eintrag hat &#8222;Freitag, 15:00 Uhr, Export, w\u00f6chentlich&#8220; eintr\u00e4gt. Oder man nutzt f\u00fcr den Befehl das Texterweiterungstool Espanso, \u00fcber das ich in einem fr\u00fcheren Artikel berichtet habe. Eleganter ist es nat\u00fcrlich, wenn unser kleiner Raspberry Pi die Arbeit f\u00fcr uns erledigt. Dazu richten wir einen &#8222;Cronjob&#8220; ein. Damit wird der Export z.B. immer nachts um 4:00 Uhr durchgef\u00fchrt, w\u00e4hrend wir noch schlummern. Vorarbeit: Export-Befehl in Datei schreiben Ein kleines Skript nimmt die Befehle auf, die wir sonst mit der Hand eingeben. Keine Sorge &#8211; das ist in 20 Sekunden erledigt. Der Name der Skript-Datei ist gleichg\u00fcltig, im Beispiel nennen wir sie &#8222;ex.sh&#8220;. Die wird \u00fcber den Texteditor Nano erzeugt. Also: Kommandozeile aufrufen und &#8222;nano ex.sh&#8220; eingeben: Jetzt \u00f6ffnet sich eine leere Datei. Die erste Zeile beginnt bei solchen Skripten immer mit &#8222;#!\/bin\/bash&#8220; &#8211; danach werden die oben erw\u00e4hnten Befehle eingetragen: So sieht die Datei im Nano-Editor aus: Gespeichert wird mit &#8222;Strg + O&#8220;, Dateinamen best\u00e4tigen, &#8222;Strg + X&#8220; f\u00fcr das Schlie\u00dfen des Editors. Das Skript muss nun noch als ausf\u00fchrbare Datei gekennzeichnet werden. Das geschieht mit diesem Befehl: Cronjob anlegen Die eben erzeugte Datei starten wir \u00fcber einen Cronjob. Hier kommt wieder der Texteditor Nano ins Spiel. Zun\u00e4chst auf der Kommandozeile eingeben Falls bisher noch von keinem anderen Programm ein Cronjob eingetragen wurde, erfolgt kurz eine Abfrage, ob man Nano verwenden m\u00f6chte &#8211; die angezeigt Ziffer (in der Regel &#8222;1&#8220;) eingeben. Es muss nun nur eine einzige Zeile eingetragen werden. Diese besteht aus der Zeitangabe und dem Aufruf unserer vorher angelegten Skript-Datei. Die Art der Zeitangabe erkl\u00e4re ich gleich n\u00e4her, aber hier direkt mal ein Beispiel: Mit der Zeile &#8222;0 4 * * * \/home\/pi\/ex.sh&#8220; wird der Export von Paperless-ngx t\u00e4glich morgens um 4:00 Uhr ausgef\u00fchrt. Aber da man ja neugierig ist, ob alles klappt, richten wir kurz eine &#8222;1-Minuten-Sicherung&#8220; ein. Daf\u00fcr werden als Zeitangabe 5 Sternchen mit Leerraum gesetzt, also: Wieder mit Strg-O\/Dateinamen best\u00e4tigen\/Strg-X speichern und beenden. Nun mit dem Dateimanager den Export-Pfad aufrufen und schauen, ob da nach einer Minute die Export-Datei generiert wird. Wenn alles korrekt ist, so wird die Datei angelegt und erh\u00e4lt min\u00fctlich eine neue Version. Das ist nat\u00fcrlich \u00fcberfl\u00fcssig, daher noch einmal mit &#8222;crontab -e&#8220; die Zeitsteuerung aufrufen. Und jetzt jene Sicherungsabst\u00e4nde eintragen, die man haben m\u00f6chte. Zeiteintrag bestimmen Die f\u00fcnf Punkte stehen f\u00fcr &#8222;Minute&#8220;, &#8222;Stunde&#8220;, &#8222;Tag des Monats&#8220;, &#8222;Monat&#8220; und &#8222;Wochentag&#8220;. Das klingt kompliziert, man hat den Bogen aber rasch raus. Ich \u00fcbernehme hier einfach das Beispiel von Wikipedia: F\u00fcr die Ausf\u00fchrung an jedem Samstag um 23:45 Uhr muss der Vorspann also lauten: Mit einem &#8222;\/&#8220; an der jeweiligen Stelle kann eine Angabe wie &#8222;f\u00fchre alle x Minuten oder Stunden etwas aus. Also etwa &#8222;\/10 * * * *&#8220; f\u00fcr &#8222;alle 10 Minuten oder &#8222;* \/6 * * *&#8220; f\u00fcr &#8222;alle 6 Stunden&#8220;. 4 Uhr morgens ist eine gute Zeit, denn der Vorschlag in der n\u00e4chsten Folge wird sein, um 4:30 Uhr \u00fcber ein anderes Tool eine verschl\u00fcsselte Komplettsicherung einzurichten. Die zeitliche Automatisierung wird dabei von dem Backup-Tool vorgenommen &#8211; wir m\u00fcssen also keine weiteren Cronjobs mehr &#8222;von Hand&#8220; anlegen.<\/p>\n","protected":false},"author":1,"featured_media":1668,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[97,104,100,103,102,105,99],"class_list":["post-1667","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-allgemein","tag-2e3440ff","tag-104","tag-81a1c1","tag-88c0d0","tag-a3be8c","tag-b48ead","tag-d8dee9ff"],"_links":{"self":[{"href":"https:\/\/digital-cleaning.de\/index.php\/wp-json\/wp\/v2\/posts\/1667","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/digital-cleaning.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/digital-cleaning.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/digital-cleaning.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/digital-cleaning.de\/index.php\/wp-json\/wp\/v2\/comments?post=1667"}],"version-history":[{"count":9,"href":"https:\/\/digital-cleaning.de\/index.php\/wp-json\/wp\/v2\/posts\/1667\/revisions"}],"predecessor-version":[{"id":2184,"href":"https:\/\/digital-cleaning.de\/index.php\/wp-json\/wp\/v2\/posts\/1667\/revisions\/2184"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/digital-cleaning.de\/index.php\/wp-json\/wp\/v2\/media\/1668"}],"wp:attachment":[{"href":"https:\/\/digital-cleaning.de\/index.php\/wp-json\/wp\/v2\/media?parent=1667"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/digital-cleaning.de\/index.php\/wp-json\/wp\/v2\/categories?post=1667"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/digital-cleaning.de\/index.php\/wp-json\/wp\/v2\/tags?post=1667"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}