<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.hostsharing.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hsh-peterhormanns</id>
	<title>Hostsharing Wiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.hostsharing.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hsh-peterhormanns"/>
	<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Spezial:Beitr%C3%A4ge/Hsh-peterhormanns"/>
	<updated>2026-04-28T15:18:19Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Redmine_im_Webspace&amp;diff=7519</id>
		<title>Redmine im Webspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Redmine_im_Webspace&amp;diff=7519"/>
		<updated>2026-02-16T19:08:12Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* Redmine-Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Redmine ist eine umfangreiche Projektmanagement-Software.  Die Software ist multiprojektfähig und legt für jedes Projekt mehrere Werkzeuge an:&lt;br /&gt;
* Wiki&lt;br /&gt;
* Vorgangsverfolgung (Ticketsystem, Issue Tracker)&lt;br /&gt;
* Zeiterfassung&lt;br /&gt;
* Dokument- und Dateiverwaltung&lt;br /&gt;
* Foren&lt;br /&gt;
* Kalender, Gantt-Charts&lt;br /&gt;
* Schnittstelle zur Versionverwaltung (Git, Mercurial und weitere)&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung beschreibt, wie man Redmine auf der Managed Hosting Plattform von Hostsharing installieren kann. Redmine lässt sich in jedem Managed Webspace betreiben.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von HSAdmin wird angelegt:&lt;br /&gt;
# Ein User als Service-User mit &#039;&#039;/bin/bash&#039;&#039; als Shell, zum Beispiel Beispiel: &#039;&#039;xyz00-redmine&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-redmine&#039;&#039; als Domain-Administrator, zum Beispiel &#039;&#039;prj.example.com&#039;&#039;&lt;br /&gt;
# Die Domain muss aktualisiert werden: Domainoption &#039;&#039;passenger&#039;&#039; einschalten, &#039;&#039;fastcgi&#039;&#039; ausschalten&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_dbuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_prjdb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_dbuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Ruby installieren ==&lt;br /&gt;
&lt;br /&gt;
Für Redmine 6.0.x habe ich Ruby 3.3.x installiert. Siehe dazu die Seite [[RubyRBEnv]]&lt;br /&gt;
&lt;br /&gt;
== Download, Entpacken, Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Anmeldung per ssh als User  &#039;&#039;xyz00-redmine&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ssh xyz00-redmine@xyz00.hostsharing.net&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf dem Hostsharing-Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
mkdir data&lt;br /&gt;
chmod 700 data&lt;br /&gt;
wget http://www.redmine.org/releases/redmine-6.0.6.tar.gz&lt;br /&gt;
tar xzf redmine-6.0.6.tar.gz &lt;br /&gt;
cd ~/redmine-6.0.6/config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anlegen der beiden Dateien &amp;quot;database.yml&amp;quot; und &amp;quot;configuration.yml&amp;quot; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
database.yml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line&amp;gt;&lt;br /&gt;
production:&lt;br /&gt;
  adapter: postgresql&lt;br /&gt;
  database: xyz00_prjdb&lt;br /&gt;
  host: localhost&lt;br /&gt;
  username: xyz00_dbuser&lt;br /&gt;
  password: &amp;quot;meinPasswort&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configuration.yml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line&amp;gt;&lt;br /&gt;
default:&lt;br /&gt;
  email_delivery:&lt;br /&gt;
    delivery_method: :smtp&lt;br /&gt;
    smtp_settings:&lt;br /&gt;
      address: &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
      port: 4025&lt;br /&gt;
      enable_starttls_auto: false&lt;br /&gt;
  attachments_storage_path: &amp;quot;/home/pacs/xyz00/users/redmine/data&amp;quot;&lt;br /&gt;
  autologin_cookie_name:&lt;br /&gt;
  autologin_cookie_path:&lt;br /&gt;
  autologin_cookie_secure:&lt;br /&gt;
  scm_subversion_command:&lt;br /&gt;
  scm_mercurial_command:&lt;br /&gt;
  scm_git_command:&lt;br /&gt;
  scm_cvs_command:&lt;br /&gt;
  scm_bazaar_command:&lt;br /&gt;
  scm_darcs_command:&lt;br /&gt;
  scm_subversion_path_regexp:&lt;br /&gt;
  scm_mercurial_path_regexp:&lt;br /&gt;
  scm_git_path_regexp:&lt;br /&gt;
  scm_cvs_path_regexp:&lt;br /&gt;
  scm_bazaar_path_regexp:&lt;br /&gt;
  scm_darcs_path_regexp:&lt;br /&gt;
  scm_filesystem_path_regexp:&lt;br /&gt;
  scm_stderr_log_file:&lt;br /&gt;
  database_cipher_key:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: Die Einrückung muss immer genau um zwei Leerzeichen erfolgen!&lt;br /&gt;
&lt;br /&gt;
Der &amp;quot;attachments_storage_path&amp;quot; muss angepasst werden (&amp;quot;xyz00&amp;quot; und &amp;quot;redmine&amp;quot; durch den eigenen Webspace bzw. das eigene User-Postfix ersetzen). Wenn für den Webspace &amp;quot;Storage&amp;quot; gebucht ist, kann der Speicher nach &amp;quot;/home/storage/...&amp;quot; gelegt werden.&lt;br /&gt;
&lt;br /&gt;
== Redmine-Installation ==&lt;br /&gt;
&lt;br /&gt;
Weiterhin als &amp;quot;xyz00-redmine&amp;quot; auf dem Hostsharing-Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/redmine-6.0.6&lt;br /&gt;
bundle config set --local path &#039;vendor/bundle&#039;&lt;br /&gt;
bundle config set --local without &#039;development:test&#039;&lt;br /&gt;
bundle install&lt;br /&gt;
bundle exec rake generate_secret_token&lt;br /&gt;
RAILS_ENV=production bundle exec rake db:migrate&lt;br /&gt;
RAILS_ENV=production bundle exec rake redmine:load_default_data&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weiter in der Shell:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/doms/prj.example.com/&lt;br /&gt;
rm -rf htdocs-ssl/ app-ssl/ subs/www/ subs-ssl/www/&lt;br /&gt;
ln -s $HOME/redmine-6.0.6 app-ssl&lt;br /&gt;
ln -s $HOME/redmine-6.0.6/public htdocs-ssl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn alles gut gegangen ist, ist die Redmine-Installation unter&lt;br /&gt;
https://prj.example.com erreichbar. Beim ersten Login als User &amp;quot;admin&amp;quot; mit Passwort &amp;quot;admin&amp;quot; wird ein neues Passwort konfiguriert.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung des Admin-Passwort sollten einige Einstellungen im Bereich Administration/Konfiguration durchgesehen werden:&lt;br /&gt;
* im Bereich &amp;quot;Allgemein&amp;quot; der Applikationstitel, der Hostname und das Protokoll&lt;br /&gt;
* im Bereich &amp;quot;Mailbenachrichtigung&amp;quot; der E-Mail-Absender und die E-Mail-Fußzeile&lt;br /&gt;
&lt;br /&gt;
== Konfiguration von Sidekiq ==&lt;br /&gt;
&lt;br /&gt;
Für Hintergrundprozesse, zum Beispiel für den Versand von EMail-Benachrichtigungen, sollte man in einem produktiven System Sidekiq verwenden. Dazu müssen zwei Services konfiguriert werden: Redis und Sidekiq.&lt;br /&gt;
&lt;br /&gt;
Zur Konfiguration von Redis als Service siehe [[Redis]]. In der Beispielkonfiguration lauscht Redis auf localhost:33033.&lt;br /&gt;
&lt;br /&gt;
Wir machen diese Redis-URL dem Passenger-Prozess über eine Environment-Variable bekannt. Dazu schreiben wir in eine Datei &lt;br /&gt;
&amp;quot;~/doms/prj.example.com/.htaccess&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line&amp;gt;&lt;br /&gt;
SetEnv REDIS_URL redis://:redispassword@127.0.0.1:33033/0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Installation von Sidekiq legen wir eine Datei &amp;quot;~/redmine-6.0.6/Gemfile.local&amp;quot; an. Der Inhalt ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line&amp;gt;&lt;br /&gt;
gem &#039;sidekiq&#039;&lt;br /&gt;
gem &amp;quot;redis&amp;quot;, &amp;quot;&amp;gt;= 4.0.1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;quot;~/redmine-6.0.6/&amp;quot; ausführen: &amp;quot;bundle install&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Sidekiq bekommt die Redis-URL über seine Unit-Definition:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Sidekiq Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
WorkingDirectory=%h/redmine-6.0.6&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
Environment=&amp;quot;RAILS_ENV=production&amp;quot;&lt;br /&gt;
Environment=&amp;quot;REDIS_URL=redis://:redispassword@127.0.0.1:33033/0&amp;quot;&lt;br /&gt;
ExecStart=%h/.rbenv/shims/bundle exec sidekiq -q default -q mailers&lt;br /&gt;
StandardOutput=append:%h/var/log/sidekiq.out.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
NoNewPrivileges=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nicht vergessen das Verzeichnis &amp;quot;~/var/log&amp;quot; anzulegen oder anzupassen.&lt;br /&gt;
&lt;br /&gt;
== eingehende E-Mails ==&lt;br /&gt;
&lt;br /&gt;
Wenn für eingehende E-Mail-Nachrichten jeweils ein Ticket angelegt werden soll, ist das über die Datei .forward möglich.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# cat .forward &lt;br /&gt;
&amp;quot;|/home/pacs/xyz00/users/redmine/.rbenv/shims/ruby /home/pacs/xyz00/users/redmine/redmine-6.0.6/extra/mail_handler/rdm-mailhandler.rb --url=https://prj.example.com --key=******** --project=pppp --tracker=tttt --allow-override=all --unknown-user=create&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Wiki des Redmine Projekt sind die Optionen des Skript &#039;rdm-mailhandler.rb&#039; beschrieben (siehe Links).&lt;br /&gt;
&lt;br /&gt;
== weitere Schritte ==&lt;br /&gt;
&lt;br /&gt;
Redmine ist ein stabiles Projektmanagement-Werkzeug. Es ist freie Software und weiterhin gepflegt. Die Benutzeroberfläche ist funktional. Sie macht aber einen etwas veralteten Eindruck.&lt;br /&gt;
&lt;br /&gt;
Es gibt einige Themes und Plugins, die diesen Nachteil teilweise kompensieren können:&lt;br /&gt;
* Das Theme &amp;quot;farend bleuclair&amp;quot; sorgt für einen frischeren Ersteindruck&lt;br /&gt;
* Ein Kanban Board ist als Plugin verfügbar&lt;br /&gt;
* ebenso kann ein  visueller Editor für das Wiki nachgerüstet werden&lt;br /&gt;
&lt;br /&gt;
Weiterhin ist es möglich, das Anlegen von Tickets für eingehende E-Mail-Nachrichten zu konfigurieren.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.redmine.org/ Redmine Projekt]&lt;br /&gt;
* [https://www.redmine.org/projects/redmine/wiki/RedmineInstall Installationsanleitung]&lt;br /&gt;
* [https://github.com/farend/redmine_theme_farend_bleuclair Theme Farend Bleuclair]&lt;br /&gt;
* [https://github.com/jgraichen/redmine_dashboard Redmine Dashboard Plugin] oder [https://github.com/happy-se-life/kanban Kanban Board Plugin]&lt;br /&gt;
* [https://github.com/taqueci/redmine_wysiwyg_editor Wysiwyg Editor Plugin]&lt;br /&gt;
* [https://github.com/picman/redmine_dmsf Dokumentenverwaltung (DMS) mit WebDAV-Server und Volltextsuche]&lt;br /&gt;
* [https://www.redmine.org/projects/redmine/wiki/RedmineReceivingEmails Eingehende E-Mails verarbeiten]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Passenger]]&lt;br /&gt;
[[Kategorie:Projektverwaltung]]&lt;br /&gt;
[[Kategorie:Projektmanagement]]&lt;br /&gt;
[[Kategorie:WebDAV]]&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Redmine_im_Webspace&amp;diff=7518</id>
		<title>Redmine im Webspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Redmine_im_Webspace&amp;diff=7518"/>
		<updated>2026-02-16T18:28:49Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* Konfiguration von Sidekiq */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Redmine ist eine umfangreiche Projektmanagement-Software.  Die Software ist multiprojektfähig und legt für jedes Projekt mehrere Werkzeuge an:&lt;br /&gt;
* Wiki&lt;br /&gt;
* Vorgangsverfolgung (Ticketsystem, Issue Tracker)&lt;br /&gt;
* Zeiterfassung&lt;br /&gt;
* Dokument- und Dateiverwaltung&lt;br /&gt;
* Foren&lt;br /&gt;
* Kalender, Gantt-Charts&lt;br /&gt;
* Schnittstelle zur Versionverwaltung (Git, Mercurial und weitere)&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung beschreibt, wie man Redmine auf der Managed Hosting Plattform von Hostsharing installieren kann. Redmine lässt sich in jedem Managed Webspace betreiben.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von HSAdmin wird angelegt:&lt;br /&gt;
# Ein User als Service-User mit &#039;&#039;/bin/bash&#039;&#039; als Shell, zum Beispiel Beispiel: &#039;&#039;xyz00-redmine&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-redmine&#039;&#039; als Domain-Administrator, zum Beispiel &#039;&#039;prj.example.com&#039;&#039;&lt;br /&gt;
# Die Domain muss aktualisiert werden: Domainoption &#039;&#039;passenger&#039;&#039; einschalten, &#039;&#039;fastcgi&#039;&#039; ausschalten&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_dbuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_prjdb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_dbuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Ruby installieren ==&lt;br /&gt;
&lt;br /&gt;
Für Redmine 6.0.x habe ich Ruby 3.3.x installiert. Siehe dazu die Seite [[RubyRBEnv]]&lt;br /&gt;
&lt;br /&gt;
== Download, Entpacken, Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Anmeldung per ssh als User  &#039;&#039;xyz00-redmine&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ssh xyz00-redmine@xyz00.hostsharing.net&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf dem Hostsharing-Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
mkdir data&lt;br /&gt;
chmod 700 data&lt;br /&gt;
wget http://www.redmine.org/releases/redmine-6.0.6.tar.gz&lt;br /&gt;
tar xzf redmine-6.0.6.tar.gz &lt;br /&gt;
cd ~/redmine-6.0.6/config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anlegen der beiden Dateien &amp;quot;database.yml&amp;quot; und &amp;quot;configuration.yml&amp;quot; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
database.yml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line&amp;gt;&lt;br /&gt;
production:&lt;br /&gt;
  adapter: postgresql&lt;br /&gt;
  database: xyz00_prjdb&lt;br /&gt;
  host: localhost&lt;br /&gt;
  username: xyz00_dbuser&lt;br /&gt;
  password: &amp;quot;meinPasswort&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configuration.yml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line&amp;gt;&lt;br /&gt;
default:&lt;br /&gt;
  email_delivery:&lt;br /&gt;
    delivery_method: :smtp&lt;br /&gt;
    smtp_settings:&lt;br /&gt;
      address: &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
      port: 4025&lt;br /&gt;
      enable_starttls_auto: false&lt;br /&gt;
  attachments_storage_path: &amp;quot;/home/pacs/xyz00/users/redmine/data&amp;quot;&lt;br /&gt;
  autologin_cookie_name:&lt;br /&gt;
  autologin_cookie_path:&lt;br /&gt;
  autologin_cookie_secure:&lt;br /&gt;
  scm_subversion_command:&lt;br /&gt;
  scm_mercurial_command:&lt;br /&gt;
  scm_git_command:&lt;br /&gt;
  scm_cvs_command:&lt;br /&gt;
  scm_bazaar_command:&lt;br /&gt;
  scm_darcs_command:&lt;br /&gt;
  scm_subversion_path_regexp:&lt;br /&gt;
  scm_mercurial_path_regexp:&lt;br /&gt;
  scm_git_path_regexp:&lt;br /&gt;
  scm_cvs_path_regexp:&lt;br /&gt;
  scm_bazaar_path_regexp:&lt;br /&gt;
  scm_darcs_path_regexp:&lt;br /&gt;
  scm_filesystem_path_regexp:&lt;br /&gt;
  scm_stderr_log_file:&lt;br /&gt;
  database_cipher_key:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: Die Einrückung muss immer genau um zwei Leerzeichen erfolgen!&lt;br /&gt;
&lt;br /&gt;
Der &amp;quot;attachments_storage_path&amp;quot; muss angepasst werden (&amp;quot;xyz00&amp;quot; und &amp;quot;redmine&amp;quot; durch den eigenen Webspace bzw. das eigene User-Postfix ersetzen). Wenn für den Webspace &amp;quot;Storage&amp;quot; gebucht ist, kann der Speicher nach &amp;quot;/home/storage/...&amp;quot; gelegt werden.&lt;br /&gt;
&lt;br /&gt;
== Redmine-Installation ==&lt;br /&gt;
&lt;br /&gt;
Weiterhin als &amp;quot;xyz00-redmine&amp;quot; auf dem Hostsharing-Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/redmine-6.0.6&lt;br /&gt;
bundle config --local path &#039;vendor/bundle&#039;&lt;br /&gt;
bundle config --local without &#039;development:test&#039;&lt;br /&gt;
bundle install&lt;br /&gt;
bundle exec rake generate_secret_token&lt;br /&gt;
RAILS_ENV=production bundle exec rake db:migrate&lt;br /&gt;
RAILS_ENV=production bundle exec rake redmine:load_default_data&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weiter in der Shell:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/doms/prj.example.com/&lt;br /&gt;
rm -rf htdocs-ssl/ app-ssl/ subs/www/ subs-ssl/www/&lt;br /&gt;
ln -s $HOME/redmine-6.0.6 app-ssl&lt;br /&gt;
ln -s $HOME/redmine-6.0.6/public htdocs-ssl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn alles gut gegangen ist, ist die Redmine-Installation unter&lt;br /&gt;
https://prj.example.com erreichbar. Beim ersten Login als User &amp;quot;admin&amp;quot; mit Passwort &amp;quot;admin&amp;quot; wird ein neues Passwort konfiguriert.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung des Admin-Passwort sollten einige Einstellungen im Bereich Administration/Konfiguration durchgesehen werden:&lt;br /&gt;
* im Bereich &amp;quot;Allgemein&amp;quot; der Applikationstitel, der Hostname und das Protokoll&lt;br /&gt;
* im Bereich &amp;quot;Mailbenachrichtigung&amp;quot; der E-Mail-Absender und die E-Mail-Fußzeile&lt;br /&gt;
&lt;br /&gt;
== Konfiguration von Sidekiq ==&lt;br /&gt;
&lt;br /&gt;
Für Hintergrundprozesse, zum Beispiel für den Versand von EMail-Benachrichtigungen, sollte man in einem produktiven System Sidekiq verwenden. Dazu müssen zwei Services konfiguriert werden: Redis und Sidekiq.&lt;br /&gt;
&lt;br /&gt;
Zur Konfiguration von Redis als Service siehe [[Redis]]. In der Beispielkonfiguration lauscht Redis auf localhost:33033.&lt;br /&gt;
&lt;br /&gt;
Wir machen diese Redis-URL dem Passenger-Prozess über eine Environment-Variable bekannt. Dazu schreiben wir in eine Datei &lt;br /&gt;
&amp;quot;~/doms/prj.example.com/.htaccess&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line&amp;gt;&lt;br /&gt;
SetEnv REDIS_URL redis://:redispassword@127.0.0.1:33033/0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Installation von Sidekiq legen wir eine Datei &amp;quot;~/redmine-6.0.6/Gemfile.local&amp;quot; an. Der Inhalt ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line&amp;gt;&lt;br /&gt;
gem &#039;sidekiq&#039;&lt;br /&gt;
gem &amp;quot;redis&amp;quot;, &amp;quot;&amp;gt;= 4.0.1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;quot;~/redmine-6.0.6/&amp;quot; ausführen: &amp;quot;bundle install&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Sidekiq bekommt die Redis-URL über seine Unit-Definition:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Sidekiq Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
WorkingDirectory=%h/redmine-6.0.6&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
Environment=&amp;quot;RAILS_ENV=production&amp;quot;&lt;br /&gt;
Environment=&amp;quot;REDIS_URL=redis://:redispassword@127.0.0.1:33033/0&amp;quot;&lt;br /&gt;
ExecStart=%h/.rbenv/shims/bundle exec sidekiq -q default -q mailers&lt;br /&gt;
StandardOutput=append:%h/var/log/sidekiq.out.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
NoNewPrivileges=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nicht vergessen das Verzeichnis &amp;quot;~/var/log&amp;quot; anzulegen oder anzupassen.&lt;br /&gt;
&lt;br /&gt;
== eingehende E-Mails ==&lt;br /&gt;
&lt;br /&gt;
Wenn für eingehende E-Mail-Nachrichten jeweils ein Ticket angelegt werden soll, ist das über die Datei .forward möglich.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# cat .forward &lt;br /&gt;
&amp;quot;|/home/pacs/xyz00/users/redmine/.rbenv/shims/ruby /home/pacs/xyz00/users/redmine/redmine-6.0.6/extra/mail_handler/rdm-mailhandler.rb --url=https://prj.example.com --key=******** --project=pppp --tracker=tttt --allow-override=all --unknown-user=create&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Wiki des Redmine Projekt sind die Optionen des Skript &#039;rdm-mailhandler.rb&#039; beschrieben (siehe Links).&lt;br /&gt;
&lt;br /&gt;
== weitere Schritte ==&lt;br /&gt;
&lt;br /&gt;
Redmine ist ein stabiles Projektmanagement-Werkzeug. Es ist freie Software und weiterhin gepflegt. Die Benutzeroberfläche ist funktional. Sie macht aber einen etwas veralteten Eindruck.&lt;br /&gt;
&lt;br /&gt;
Es gibt einige Themes und Plugins, die diesen Nachteil teilweise kompensieren können:&lt;br /&gt;
* Das Theme &amp;quot;farend bleuclair&amp;quot; sorgt für einen frischeren Ersteindruck&lt;br /&gt;
* Ein Kanban Board ist als Plugin verfügbar&lt;br /&gt;
* ebenso kann ein  visueller Editor für das Wiki nachgerüstet werden&lt;br /&gt;
&lt;br /&gt;
Weiterhin ist es möglich, das Anlegen von Tickets für eingehende E-Mail-Nachrichten zu konfigurieren.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.redmine.org/ Redmine Projekt]&lt;br /&gt;
* [https://www.redmine.org/projects/redmine/wiki/RedmineInstall Installationsanleitung]&lt;br /&gt;
* [https://github.com/farend/redmine_theme_farend_bleuclair Theme Farend Bleuclair]&lt;br /&gt;
* [https://github.com/jgraichen/redmine_dashboard Redmine Dashboard Plugin] oder [https://github.com/happy-se-life/kanban Kanban Board Plugin]&lt;br /&gt;
* [https://github.com/taqueci/redmine_wysiwyg_editor Wysiwyg Editor Plugin]&lt;br /&gt;
* [https://github.com/picman/redmine_dmsf Dokumentenverwaltung (DMS) mit WebDAV-Server und Volltextsuche]&lt;br /&gt;
* [https://www.redmine.org/projects/redmine/wiki/RedmineReceivingEmails Eingehende E-Mails verarbeiten]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Passenger]]&lt;br /&gt;
[[Kategorie:Projektverwaltung]]&lt;br /&gt;
[[Kategorie:Projektmanagement]]&lt;br /&gt;
[[Kategorie:WebDAV]]&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=RubyRBEnv&amp;diff=7517</id>
		<title>RubyRBEnv</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=RubyRBEnv&amp;diff=7517"/>
		<updated>2026-02-16T18:00:36Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: Installation von ruby 3.3.10&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Eigene Ruby Installation ==&lt;br /&gt;
&lt;br /&gt;
Oft ist die vorinstallierte Version der Programmiersprache Ruby (die in Debian enthaltene Version) zu alt für die eingesetze Software.&lt;br /&gt;
&lt;br /&gt;
Hier eine kurze Anleitung, mit der man eine eigene Ruby-Umgebung für einen User einrichten kann.&lt;br /&gt;
&lt;br /&gt;
=== Installation von rbenv ===&lt;br /&gt;
&lt;br /&gt;
Konfiguration für einen User mit &amp;quot;/bin/bash&amp;quot; als Shell. Die Umgebungsvariablen werden in &amp;quot;.bash_profile&amp;quot; hinterlegt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv&lt;br /&gt;
echo &#039;export PATH=&amp;quot;$HOME/.rbenv/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
echo &#039;eval &amp;quot;$(rbenv init -)&amp;quot;&#039; &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
source ~/.bash_profile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
type rbenv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sollte eine Ausgabe erzeugen, die beginnt: &amp;quot;rbenv is a function&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Installation von ruby-build ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installation von ruby ===&lt;br /&gt;
&lt;br /&gt;
Mit dem Kommando &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
rbenv install --list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
erhält man eine Liste der aktuell untersützten Ruby-Versionen&lt;br /&gt;
&lt;br /&gt;
Installation mit (hier Version 3.3.10):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
rbenv install 3.3.10&lt;br /&gt;
rbenv global 3.3.10&lt;br /&gt;
gem install bundler&lt;br /&gt;
rbenv rehash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
ruby -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
liefert die Ausgabe &amp;quot;ruby 3.3.10 (2025-10-23 revision 343ea05002) [x86_64-linux]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Minimale Web Applikation mit Passenger ==&lt;br /&gt;
&lt;br /&gt;
Zur Integration der eigenen Ruby-Installation in den Apache erfolgt über das  Apache-Modul &amp;quot;Passenger&amp;quot;.&lt;br /&gt;
Vor der Nutzung dieses Moduls bitte unbedingt die 	&lt;br /&gt;
[[Phusion Passenger|Hinweise zur Nutzung beachten]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für eine minimale Beispielanwendung legen wir eine Datei &#039;&#039;config.ru&#039;&#039; mit folgenden Inhalt an&lt;br /&gt;
(&amp;quot;ru&amp;quot;  kurz für &amp;quot;rackup&amp;quot;): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ruby line&amp;gt;&lt;br /&gt;
# config.ru&lt;br /&gt;
&lt;br /&gt;
class App&lt;br /&gt;
    def call(env)&lt;br /&gt;
      headers = { &#039;Content-Type&#039; =&amp;gt; &#039;text/html&#039; }&lt;br /&gt;
      response = [&#039;Greetings from Rack!!&#039;]&lt;br /&gt;
      [200, headers, response]&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
run App.new&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sinatra Web Applikation mit Passenger ==&lt;br /&gt;
&lt;br /&gt;
Um eine Beispielanwendung zu installieren, orientieren wir uns an https://github.com/phusion/passenger-ruby-sinatra-demo/tree/end_result&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;quot;/home/pacs/xyz00/users/example/doms/example.com/app-ssl/&amp;quot; legen wir folgende Dateien und Verzeichnisse an:&lt;br /&gt;
&lt;br /&gt;
Gemfile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ruby line&amp;gt;&lt;br /&gt;
source &#039;https://rubygems.org/&#039;&lt;br /&gt;
&lt;br /&gt;
gem &#039;sinatra&#039;&lt;br /&gt;
gem &#039;tilt&#039;&lt;br /&gt;
gem &#039;base64&#039;, &#039;0.1.1&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
app.rb:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ruby line&amp;gt;&lt;br /&gt;
require &#039;sinatra/base&#039;&lt;br /&gt;
require &#039;tilt/erb&#039;&lt;br /&gt;
&lt;br /&gt;
class ExampleApp &amp;lt; Sinatra::Base&lt;br /&gt;
  get &#039;/&#039; do&lt;br /&gt;
    erb :index&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
config.ru:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ruby line&amp;gt;&lt;br /&gt;
require File.absolute_path(&amp;quot;app.rb&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
run ExampleApp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
views/index.erb:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=html line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;Hello&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Hello world!&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;% if defined?(PhusionPassenger) %&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Congratulations, you are running this app in Passenger!&amp;lt;br/&amp;gt;&lt;br /&gt;
         You are running Ruby Version: &amp;lt;%= RUBY_VERSION %&amp;gt;&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;You are not running this app in Passenger.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;quot;/home/pacs/xyz00/users/example/doms/example.com/app-ssl/&amp;quot; führen wir aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
bundle config --local path vendor/bundle&lt;br /&gt;
bundle install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://www.writesoftwarewell.com/definitive-guide-to-rack/&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=RubyRBEnv&amp;diff=7516</id>
		<title>RubyRBEnv</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=RubyRBEnv&amp;diff=7516"/>
		<updated>2026-02-16T17:41:07Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* Installation von ruby */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Eigene Ruby Installation ==&lt;br /&gt;
&lt;br /&gt;
Oft ist die vorinstallierte Version der Programmiersprache Ruby (die in Debian enthaltene Version) zu alt für die eingesetze Software.&lt;br /&gt;
&lt;br /&gt;
Hier eine kurze Anleitung, mit der man eine eigene Ruby-Umgebung für einen User einrichten kann.&lt;br /&gt;
&lt;br /&gt;
=== Installation von rbenv ===&lt;br /&gt;
&lt;br /&gt;
Konfiguration für einen User mit &amp;quot;/bin/bash&amp;quot; als Shell. Die Umgebungsvariablen werden in &amp;quot;.bash_profile&amp;quot; hinterlegt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv&lt;br /&gt;
echo &#039;export PATH=&amp;quot;$HOME/.rbenv/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
echo &#039;eval &amp;quot;$(rbenv init -)&amp;quot;&#039; &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
source ~/.bash_profile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
type rbenv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sollte eine Ausgabe erzeugen, die beginnt: &amp;quot;rbenv is a function&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Installation von ruby-build ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installation von ruby ===&lt;br /&gt;
&lt;br /&gt;
Mit dem Kommando &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
rbenv install --list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
erhält man eine Liste der aktuell untersützten Ruby-Versionen&lt;br /&gt;
&lt;br /&gt;
Installation mit (hier Version 3.4.8):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
rbenv install 3.4.8&lt;br /&gt;
rbenv global 3.4.8&lt;br /&gt;
gem install bundler&lt;br /&gt;
rbenv rehash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
ruby -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
liefert die Ausgabe &amp;quot;ruby 3.4.8 (2025-12-17 revision 995b59f666) +PRISM [x86_64-linux]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Minimale Web Applikation mit Passenger ==&lt;br /&gt;
&lt;br /&gt;
Zur Integration der eigenen Ruby-Installation in den Apache erfolgt über das  Apache-Modul &amp;quot;Passenger&amp;quot;.&lt;br /&gt;
Vor der Nutzung dieses Moduls bitte unbedingt die 	&lt;br /&gt;
[[Phusion Passenger|Hinweise zur Nutzung beachten]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für eine minimale Beispielanwendung legen wir eine Datei &#039;&#039;config.ru&#039;&#039; mit folgenden Inhalt an&lt;br /&gt;
(&amp;quot;ru&amp;quot;  kurz für &amp;quot;rackup&amp;quot;): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ruby line&amp;gt;&lt;br /&gt;
# config.ru&lt;br /&gt;
&lt;br /&gt;
class App&lt;br /&gt;
    def call(env)&lt;br /&gt;
      headers = { &#039;Content-Type&#039; =&amp;gt; &#039;text/html&#039; }&lt;br /&gt;
      response = [&#039;Greetings from Rack!!&#039;]&lt;br /&gt;
      [200, headers, response]&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
run App.new&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sinatra Web Applikation mit Passenger ==&lt;br /&gt;
&lt;br /&gt;
Um eine Beispielanwendung zu installieren, orientieren wir uns an https://github.com/phusion/passenger-ruby-sinatra-demo/tree/end_result&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;quot;/home/pacs/xyz00/users/example/doms/example.com/app-ssl/&amp;quot; legen wir folgende Dateien und Verzeichnisse an:&lt;br /&gt;
&lt;br /&gt;
Gemfile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ruby line&amp;gt;&lt;br /&gt;
source &#039;https://rubygems.org/&#039;&lt;br /&gt;
&lt;br /&gt;
gem &#039;sinatra&#039;&lt;br /&gt;
gem &#039;tilt&#039;&lt;br /&gt;
gem &#039;base64&#039;, &#039;0.1.1&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
app.rb:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ruby line&amp;gt;&lt;br /&gt;
require &#039;sinatra/base&#039;&lt;br /&gt;
require &#039;tilt/erb&#039;&lt;br /&gt;
&lt;br /&gt;
class ExampleApp &amp;lt; Sinatra::Base&lt;br /&gt;
  get &#039;/&#039; do&lt;br /&gt;
    erb :index&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
config.ru:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ruby line&amp;gt;&lt;br /&gt;
require File.absolute_path(&amp;quot;app.rb&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
run ExampleApp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
views/index.erb:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=html line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;Hello&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Hello world!&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;% if defined?(PhusionPassenger) %&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Congratulations, you are running this app in Passenger!&amp;lt;br/&amp;gt;&lt;br /&gt;
         You are running Ruby Version: &amp;lt;%= RUBY_VERSION %&amp;gt;&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;You are not running this app in Passenger.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;quot;/home/pacs/xyz00/users/example/doms/example.com/app-ssl/&amp;quot; führen wir aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
bundle config --local path vendor/bundle&lt;br /&gt;
bundle install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://www.writesoftwarewell.com/definitive-guide-to-rack/&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=RubyRBEnv&amp;diff=7515</id>
		<title>RubyRBEnv</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=RubyRBEnv&amp;diff=7515"/>
		<updated>2026-02-16T17:36:15Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* Installation von ruby */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Eigene Ruby Installation ==&lt;br /&gt;
&lt;br /&gt;
Oft ist die vorinstallierte Version der Programmiersprache Ruby (die in Debian enthaltene Version) zu alt für die eingesetze Software.&lt;br /&gt;
&lt;br /&gt;
Hier eine kurze Anleitung, mit der man eine eigene Ruby-Umgebung für einen User einrichten kann.&lt;br /&gt;
&lt;br /&gt;
=== Installation von rbenv ===&lt;br /&gt;
&lt;br /&gt;
Konfiguration für einen User mit &amp;quot;/bin/bash&amp;quot; als Shell. Die Umgebungsvariablen werden in &amp;quot;.bash_profile&amp;quot; hinterlegt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv&lt;br /&gt;
echo &#039;export PATH=&amp;quot;$HOME/.rbenv/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
echo &#039;eval &amp;quot;$(rbenv init -)&amp;quot;&#039; &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
source ~/.bash_profile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
type rbenv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sollte eine Ausgabe erzeugen, die beginnt: &amp;quot;rbenv is a function&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Installation von ruby-build ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installation von ruby ===&lt;br /&gt;
&lt;br /&gt;
Mit dem Kommando &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
rbenv install --list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
erhält man eine Liste der aktuell untersützten Ruby-Versionen&lt;br /&gt;
&lt;br /&gt;
Installation mit (hier Version 3.4.8):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
rbenv install 3.4.8&lt;br /&gt;
rbenv global 3.4.8&lt;br /&gt;
gem install bundler&lt;br /&gt;
rbenv rehash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
ruby -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
liefert die Ausgabe &amp;quot;ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) [x86_64-linux]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Minimale Web Applikation mit Passenger ==&lt;br /&gt;
&lt;br /&gt;
Zur Integration der eigenen Ruby-Installation in den Apache erfolgt über das  Apache-Modul &amp;quot;Passenger&amp;quot;.&lt;br /&gt;
Vor der Nutzung dieses Moduls bitte unbedingt die 	&lt;br /&gt;
[[Phusion Passenger|Hinweise zur Nutzung beachten]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für eine minimale Beispielanwendung legen wir eine Datei &#039;&#039;config.ru&#039;&#039; mit folgenden Inhalt an&lt;br /&gt;
(&amp;quot;ru&amp;quot;  kurz für &amp;quot;rackup&amp;quot;): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ruby line&amp;gt;&lt;br /&gt;
# config.ru&lt;br /&gt;
&lt;br /&gt;
class App&lt;br /&gt;
    def call(env)&lt;br /&gt;
      headers = { &#039;Content-Type&#039; =&amp;gt; &#039;text/html&#039; }&lt;br /&gt;
      response = [&#039;Greetings from Rack!!&#039;]&lt;br /&gt;
      [200, headers, response]&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
run App.new&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sinatra Web Applikation mit Passenger ==&lt;br /&gt;
&lt;br /&gt;
Um eine Beispielanwendung zu installieren, orientieren wir uns an https://github.com/phusion/passenger-ruby-sinatra-demo/tree/end_result&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;quot;/home/pacs/xyz00/users/example/doms/example.com/app-ssl/&amp;quot; legen wir folgende Dateien und Verzeichnisse an:&lt;br /&gt;
&lt;br /&gt;
Gemfile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ruby line&amp;gt;&lt;br /&gt;
source &#039;https://rubygems.org/&#039;&lt;br /&gt;
&lt;br /&gt;
gem &#039;sinatra&#039;&lt;br /&gt;
gem &#039;tilt&#039;&lt;br /&gt;
gem &#039;base64&#039;, &#039;0.1.1&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
app.rb:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ruby line&amp;gt;&lt;br /&gt;
require &#039;sinatra/base&#039;&lt;br /&gt;
require &#039;tilt/erb&#039;&lt;br /&gt;
&lt;br /&gt;
class ExampleApp &amp;lt; Sinatra::Base&lt;br /&gt;
  get &#039;/&#039; do&lt;br /&gt;
    erb :index&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
config.ru:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ruby line&amp;gt;&lt;br /&gt;
require File.absolute_path(&amp;quot;app.rb&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
run ExampleApp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
views/index.erb:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=html line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;Hello&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Hello world!&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;% if defined?(PhusionPassenger) %&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Congratulations, you are running this app in Passenger!&amp;lt;br/&amp;gt;&lt;br /&gt;
         You are running Ruby Version: &amp;lt;%= RUBY_VERSION %&amp;gt;&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;% else %&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;You are not running this app in Passenger.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;quot;/home/pacs/xyz00/users/example/doms/example.com/app-ssl/&amp;quot; führen wir aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
bundle config --local path vendor/bundle&lt;br /&gt;
bundle install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://www.writesoftwarewell.com/definitive-guide-to-rack/&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Spamfilter&amp;diff=7512</id>
		<title>Spamfilter</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Spamfilter&amp;diff=7512"/>
		<updated>2026-02-16T12:36:46Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* Eingangsserver konfigurieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Einrichtung, Konfiguration und Optimierung eines Spamfilters auf den Hostsharing Servern. Der Artikel beschreibt drei alternative Möglichkeiten: &lt;br /&gt;
&lt;br /&gt;
1. Die Nutzung der &amp;quot;xmailin&amp;quot;-Server für eine komplette Domain&lt;br /&gt;
&lt;br /&gt;
2. Die Einrichtung von Spamassassin für das persönliche Postfach&lt;br /&gt;
&lt;br /&gt;
3. Nutzung der Spam-Appliance &amp;quot;SecureMX&amp;quot; für eine komplette Domain&lt;br /&gt;
&lt;br /&gt;
= Alternative 1: Maileingangsserver mit Spamfilter nutzen =&lt;br /&gt;
&lt;br /&gt;
Diese Alternative kann von einer Domain-Administration oder vom &amp;quot;Webmaster on Demand&amp;quot; für eine oder mehrere E-Mail-Domains eingerichtet werden. Ein globaler Sieve-Filter für markiete Spam-Nachrichten ist in der Standard-Konfiguration voreingestellt, &lt;br /&gt;
so dass Nachrichten mit Spam-Bewertung in einen vorhandenen Spam-Ordner einsortiert werden.&lt;br /&gt;
&lt;br /&gt;
Seit einigen Jahren betreibt Hostsharing zusätzlich zu den vorkonfigurierte Maileingangsservern einen zweiten Satz von Maileingangsservern, bei denen Spamassassin bereits beim Annehmen einer E-Mail ausgeführt wird. Aktuell ist eine Gruppe von Eingangsserver mit der Software &amp;quot;rspamd&amp;quot; hinzugekommen. Eingehende Nachrichten mit mit Malware oder sehr hoher Bewertung als Spam werden bereits im SMTP-Dialog abgewiesen. Nachrichten mit einem geringeren Spam-Score werden angenommen und zugestellt. Spamassassin fügt die Bewertung für diese Nachrichten in die Header der Nachricht ein, zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
X-Spam-Status: Yes, score=11.29&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der globale Sieve-Filter schiebt Nachrichten mit der Markierung &amp;quot;X-Spam-Status: Yes&amp;quot; in einen Ordner &amp;quot;Junk&amp;quot;, wenn der Ordner vorhanden ist. Viele Mailprogramme legen beim ersten Verbinden mit dem IMAP-Server einen solchen Ordner an. Unser &amp;quot;Roundcube&amp;quot;&lt;br /&gt;
unter https://webmail.hostsharing.net ist entsprechend eingerichtet, so dass der Ordner nach einer Nutzung von Webmail vorhanden ist.&lt;br /&gt;
&lt;br /&gt;
== Eingangsserver konfigurieren ==&lt;br /&gt;
&lt;br /&gt;
Die Maileingangsserver mit Spamassassin lassen sich pro Domain konfigurieren, indem die MX-Records im DNS-Zonefile gegenüber dem Default-Zonefile angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Im Zonefile entfällt der Platzhalter &amp;quot;{MX_RR}&amp;quot;. Stattdessen werden die folgenden MX-Records eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  30  xmailin1.hostsharing.net.&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  30  xmailin2.hostsharing.net.&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  30  xmailin3.hostsharing.net.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Änderung der DNS-Zone siehe: https://www.hostsharing.net/doc/managed-operations-platform/zonefile/&lt;br /&gt;
Wer sich die Aktion auf der Shell nicht zutraut, möge bitte den &amp;quot;Webmaster on Demand&amp;quot; beauftragen.&lt;br /&gt;
&lt;br /&gt;
Die Änderung des Zonefile kann für eine Domain &amp;quot;hs-example.de&amp;quot; wie folgt überprüft werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
dig +short -t MX hs-example.de @dns1.hostsharing.net&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die folgende Ausgabe wird erwartet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
30 xmailin2.hostsharing.net.&lt;br /&gt;
30 xmailin3.hostsharing.net.&lt;br /&gt;
30 xmailin1.hostsharing.net.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Reihenfolge der drei Eingangsserver kann variieren. &lt;br /&gt;
Die führende Zahl ist die Priorität im MX-Record (hier der Wert &amp;quot;30&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
= Alternative 2: Persönlichen Spamfilter einrichten =&lt;br /&gt;
&lt;br /&gt;
Hier geht es darum, wie Personen mit (grundlegenden) Kenntnissen in der Shell-Bedienung für ihr persönliches Postfach einen Spam-Filter einrichten können. Spamassassin kann für jedes Postfach individuell konfiguriert werden. Für die Einrichtung und Pflege ist Shell-Zugang zur Mailbox erforderlich.  &lt;br /&gt;
&lt;br /&gt;
Ein Bayesfilter kann mit den persönlichen Nachrichten angelernt werden. Dazu sind tiefergehende Shell-Kenntnisse erforderlich (Shell-Skript und Einrichtung eines systemd-Timers).&lt;br /&gt;
&lt;br /&gt;
== Spamassassin Konfigurieren ==&lt;br /&gt;
&lt;br /&gt;
Der Spamfilter &amp;quot;Spamassassin&amp;quot; ist bei HS vorinstalliert. Es muss über das Kommando &amp;quot;spamc&amp;quot;, das Kommando zur Nutzung des Spamassassin-Daemon, in der Datei &amp;quot;.forward&amp;quot; eines Mail-Users aufgerufen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
&amp;quot;|/usr/bin/spamc -U /var/run/spamd -e /usr/lib/dovecot/deliver&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Effekt: Spammassassin schreibt seine Testergebnisse in die Headerzeilen jeder E-Mail und leitet die E-Mails weiter an das Programm &amp;quot;deliver&amp;quot; aus dem Dovecot-Paket. Das Sortieren von Spam-EMail in einen Spam-Ordner lässt sich mit Sieve-Filtern umsetzen.&lt;br /&gt;
&lt;br /&gt;
In dieser Variante kann man Spamassassin individuell konfigurieren. Dazu legt man im $HOME des Mailbox-Account ein Verzeichnis &amp;quot;$HOME/.spamassassin&amp;quot; an. Die Konfiguration erfolgt in der Datei &amp;quot;$HOME/.spamassassin/user_prefs&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Konfigurationsbeispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
required_score          4.0&lt;br /&gt;
report_safe             0&lt;br /&gt;
use_bayes               1&lt;br /&gt;
bayes_auto_learn        1&lt;br /&gt;
skip_rbl_checks         0&lt;br /&gt;
use_razor2              1&lt;br /&gt;
use_pyzor               1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bayesfilter anlernen ==&lt;br /&gt;
&lt;br /&gt;
Wenn der Bayesfilter eingeschaltet ist, macht es Sinn den Filter mit den Befehlen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sa-learn --spam &amp;lt;platzhalter-spam-nachricht-oder-verzeichnis&amp;gt;&lt;br /&gt;
sa-learn --ham &amp;lt;platzhalter-erwünschte-nachricht-oder-verzeichnis&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
anzulernen. Ein Bash-Skript für das Erlernen von Spam/Nonspam kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
HAM_MIN_AGE_DAYS=5&lt;br /&gt;
MAILDIR_HAM=${HOME}/Maildir/cur&lt;br /&gt;
TMPDIR=${HOME}/sa-learn-tmp&lt;br /&gt;
SPAMFOLDER=Junk&lt;br /&gt;
SPAMFOLDER_LEARNED=${SPAMFOLDER}.sa-learned&lt;br /&gt;
MAILDIR_SPAM=${HOME}/Maildir/.${SPAMFOLDER}&lt;br /&gt;
&lt;br /&gt;
# Learn spam from MAILDIR_SPAM&lt;br /&gt;
mkdir -p ${TMPDIR}/spam&lt;br /&gt;
rm -f ${TMPDIR}/spam/*&lt;br /&gt;
SPAM_COUNT=0&lt;br /&gt;
for DIR in &amp;quot;cur&amp;quot; &amp;quot;new&amp;quot;; do&lt;br /&gt;
	DIR=&amp;quot;${MAILDIR_SPAM}/${DIR}&amp;quot;&lt;br /&gt;
	cd ${DIR}&lt;br /&gt;
	# echo &amp;quot;---&amp;quot; DIR ${DIR}&lt;br /&gt;
	for SPAMFILE in $( ls ); do&lt;br /&gt;
		# echo &amp;quot;   &amp;quot; ${SPAMFILE}&lt;br /&gt;
		TMPFILE=&amp;quot;${TMPDIR}/spam/${SPAMFILE}&amp;quot;&lt;br /&gt;
		if ! zcat &amp;quot;${SPAMFILE}&amp;quot; &amp;gt; &amp;quot;${TMPFILE}&amp;quot; 2&amp;gt;/dev/null; then&lt;br /&gt;
			cp &amp;quot;${SPAMFILE}&amp;quot; &amp;quot;${TMPFILE}&amp;quot;&lt;br /&gt;
		fi&lt;br /&gt;
		SPAM_COUNT=$((SPAM_COUNT + 1))&lt;br /&gt;
	done&lt;br /&gt;
done&lt;br /&gt;
sa-learn --spam ${TMPDIR}/spam/*&lt;br /&gt;
&lt;br /&gt;
# Move processed spam to keep it in another folder&lt;br /&gt;
doveadm move -u $(whoami) INBOX.${SPAMFOLDER_LEARNED} mailbox INBOX.${SPAMFOLDER} all 2&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Learn ham from MAILDIR_HAM (&amp;gt; HAM_MIN_AGE_DAYS days; max. 2x spam count)&lt;br /&gt;
mkdir -p ${TMPDIR}/ham&lt;br /&gt;
rm -f ${TMPDIR}/ham/*&lt;br /&gt;
cd ${MAILDIR_HAM}&lt;br /&gt;
MAX_HAM=$((SPAM_COUNT * 2))&lt;br /&gt;
HAM_COUNT=0&lt;br /&gt;
for HAMFILE in $( find . -type f -mtime +${HAM_MIN_AGE_DAYS} -printf &#039;%T@ %p\n&#039; | sort -rn | cut -d&#039; &#039; -f2- | head -n ${MAX_HAM} ); do&lt;br /&gt;
	TMPFILE=&amp;quot;${TMPDIR}/ham/${HAMFILE}&amp;quot;&lt;br /&gt;
	if ! zcat &amp;quot;${HAMFILE}&amp;quot; &amp;gt; &amp;quot;${TMPFILE}&amp;quot; 2&amp;gt;/dev/null; then&lt;br /&gt;
		cp &amp;quot;${HAMFILE}&amp;quot; &amp;quot;${TMPFILE}&amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
	HAM_COUNT=$((HAM_COUNT + 1))&lt;br /&gt;
done&lt;br /&gt;
sa-learn --ham ${TMPDIR}/ham/*&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Training erfolgte mit ${SPAM_COUNT} Spam, ${HAM_COUNT} (max ${MAX_HAM}) Ham Mails.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei werden Mails verarbeitet, unabhängig davon, ob sie durch Procmail (unkomprimiert) oder über den Mailclient (komprimiert) verschoben vorliegen.&lt;br /&gt;
Für Ham wird ein Teil des Inhalts der Inbox verwendet, wobei die empfohlene Maximalanzahl von zweimal der Spammailanzahl und ein minimales Alter in Tagen gilt. Das Mindestalter garantiert ein inzwischen erfolgtes manuelles Aussortieren des Spams. Der verarbeitete Spam wird anschließend in ein separates Verzeichnis verschoben um den späteren Zugriff auf False Positives zu ermöglichen.&lt;br /&gt;
&lt;br /&gt;
Das Skript wird über einen systemd-Timer täglich ausgeführt, der pro Mailbox eingerichtet werden muss.&lt;br /&gt;
&lt;br /&gt;
= Alternative 3: SecureMX zubuchen =&lt;br /&gt;
&lt;br /&gt;
Über unseren Domain-Anbieter &amp;quot;Partnergate&amp;quot; bietet Hostsharing als dritte Alternative die kommerzielle Spam-Appliance von Cisco an. Das Produkt heißt bei Partnergate &amp;quot;SecureMX&amp;quot;: https://www.hostsharing.net/loesungen/email/spam-abwehr/&lt;br /&gt;
&lt;br /&gt;
Die Nutzung von SecureMX ist kostenpflichtig und wird auf Wunsch vom Hostsharing-Service eingerichtet. &lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass bei der Nutzung von SecureMX alle eingehenden E-Mail Nachrichten über Server geleitet werden, die nicht unter der Kontrolle von Hostsharing stehen und proprietäre Software einsetzen. Dieser Sachverhalt muss vom Mitglied ggf. datenschutzrechtlich bewertet werden.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Spamfilter&amp;diff=7511</id>
		<title>Spamfilter</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Spamfilter&amp;diff=7511"/>
		<updated>2026-02-16T12:33:33Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* Eingangsserver konfigurieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Einrichtung, Konfiguration und Optimierung eines Spamfilters auf den Hostsharing Servern. Der Artikel beschreibt drei alternative Möglichkeiten: &lt;br /&gt;
&lt;br /&gt;
1. Die Nutzung der &amp;quot;xmailin&amp;quot;-Server für eine komplette Domain&lt;br /&gt;
&lt;br /&gt;
2. Die Einrichtung von Spamassassin für das persönliche Postfach&lt;br /&gt;
&lt;br /&gt;
3. Nutzung der Spam-Appliance &amp;quot;SecureMX&amp;quot; für eine komplette Domain&lt;br /&gt;
&lt;br /&gt;
= Alternative 1: Maileingangsserver mit Spamfilter nutzen =&lt;br /&gt;
&lt;br /&gt;
Diese Alternative kann von einer Domain-Administration oder vom &amp;quot;Webmaster on Demand&amp;quot; für eine oder mehrere E-Mail-Domains eingerichtet werden. Ein globaler Sieve-Filter für markiete Spam-Nachrichten ist in der Standard-Konfiguration voreingestellt, &lt;br /&gt;
so dass Nachrichten mit Spam-Bewertung in einen vorhandenen Spam-Ordner einsortiert werden.&lt;br /&gt;
&lt;br /&gt;
Seit einigen Jahren betreibt Hostsharing zusätzlich zu den vorkonfigurierte Maileingangsservern einen zweiten Satz von Maileingangsservern, bei denen Spamassassin bereits beim Annehmen einer E-Mail ausgeführt wird. Aktuell ist eine Gruppe von Eingangsserver mit der Software &amp;quot;rspamd&amp;quot; hinzugekommen. Eingehende Nachrichten mit mit Malware oder sehr hoher Bewertung als Spam werden bereits im SMTP-Dialog abgewiesen. Nachrichten mit einem geringeren Spam-Score werden angenommen und zugestellt. Spamassassin fügt die Bewertung für diese Nachrichten in die Header der Nachricht ein, zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
X-Spam-Status: Yes, score=11.29&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der globale Sieve-Filter schiebt Nachrichten mit der Markierung &amp;quot;X-Spam-Status: Yes&amp;quot; in einen Ordner &amp;quot;Junk&amp;quot;, wenn der Ordner vorhanden ist. Viele Mailprogramme legen beim ersten Verbinden mit dem IMAP-Server einen solchen Ordner an. Unser &amp;quot;Roundcube&amp;quot;&lt;br /&gt;
unter https://webmail.hostsharing.net ist entsprechend eingerichtet, so dass der Ordner nach einer Nutzung von Webmail vorhanden ist.&lt;br /&gt;
&lt;br /&gt;
== Eingangsserver konfigurieren ==&lt;br /&gt;
&lt;br /&gt;
Die Maileingangsserver mit Spamassassin lassen sich pro Domain konfigurieren, indem die MX-Records im DNS-Zonefile gegenüber dem Default-Zonefile angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Im Zonefile entfällt der Platzhalter &amp;quot;{MX_RR}&amp;quot;. Stattdessen werden die folgenden MX-Records eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  10  xmailin1.hostsharing.net.&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  10  xmailin2.hostsharing.net.&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  10  xmailin3.hostsharing.net.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Änderung der DNS-Zone siehe: https://www.hostsharing.net/doc/managed-operations-platform/zonefile/&lt;br /&gt;
Wer sich die Aktion auf der Shell nicht zutraut, möge bitte den &amp;quot;Webmaster on Demand&amp;quot; beauftragen.&lt;br /&gt;
&lt;br /&gt;
Die Änderung des Zonefile kann für eine Domain &amp;quot;hs-example.de&amp;quot; wie folgt überprüft werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
dig +short -t MX hs-example.de @dns1.hostsharing.net&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die folgende Ausgabe wird erwartet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
10 xmailin2.hostsharing.net.&lt;br /&gt;
10 xmailin3.hostsharing.net.&lt;br /&gt;
10 xmailin1.hostsharing.net.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Reihenfolge der drei Eingangsserver kann variieren. &lt;br /&gt;
Die führende Zahl ist die Priorität im MX-Record (hier der Wert &amp;quot;10&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
= Alternative 2: Persönlichen Spamfilter einrichten =&lt;br /&gt;
&lt;br /&gt;
Hier geht es darum, wie Personen mit (grundlegenden) Kenntnissen in der Shell-Bedienung für ihr persönliches Postfach einen Spam-Filter einrichten können. Spamassassin kann für jedes Postfach individuell konfiguriert werden. Für die Einrichtung und Pflege ist Shell-Zugang zur Mailbox erforderlich.  &lt;br /&gt;
&lt;br /&gt;
Ein Bayesfilter kann mit den persönlichen Nachrichten angelernt werden. Dazu sind tiefergehende Shell-Kenntnisse erforderlich (Shell-Skript und Einrichtung eines systemd-Timers).&lt;br /&gt;
&lt;br /&gt;
== Spamassassin Konfigurieren ==&lt;br /&gt;
&lt;br /&gt;
Der Spamfilter &amp;quot;Spamassassin&amp;quot; ist bei HS vorinstalliert. Es muss über das Kommando &amp;quot;spamc&amp;quot;, das Kommando zur Nutzung des Spamassassin-Daemon, in der Datei &amp;quot;.forward&amp;quot; eines Mail-Users aufgerufen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
&amp;quot;|/usr/bin/spamc -U /var/run/spamd -e /usr/lib/dovecot/deliver&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Effekt: Spammassassin schreibt seine Testergebnisse in die Headerzeilen jeder E-Mail und leitet die E-Mails weiter an das Programm &amp;quot;deliver&amp;quot; aus dem Dovecot-Paket. Das Sortieren von Spam-EMail in einen Spam-Ordner lässt sich mit Sieve-Filtern umsetzen.&lt;br /&gt;
&lt;br /&gt;
In dieser Variante kann man Spamassassin individuell konfigurieren. Dazu legt man im $HOME des Mailbox-Account ein Verzeichnis &amp;quot;$HOME/.spamassassin&amp;quot; an. Die Konfiguration erfolgt in der Datei &amp;quot;$HOME/.spamassassin/user_prefs&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Konfigurationsbeispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
required_score          4.0&lt;br /&gt;
report_safe             0&lt;br /&gt;
use_bayes               1&lt;br /&gt;
bayes_auto_learn        1&lt;br /&gt;
skip_rbl_checks         0&lt;br /&gt;
use_razor2              1&lt;br /&gt;
use_pyzor               1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bayesfilter anlernen ==&lt;br /&gt;
&lt;br /&gt;
Wenn der Bayesfilter eingeschaltet ist, macht es Sinn den Filter mit den Befehlen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sa-learn --spam &amp;lt;platzhalter-spam-nachricht-oder-verzeichnis&amp;gt;&lt;br /&gt;
sa-learn --ham &amp;lt;platzhalter-erwünschte-nachricht-oder-verzeichnis&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
anzulernen. Ein Bash-Skript für das Erlernen von Spam/Nonspam kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
HAM_MIN_AGE_DAYS=5&lt;br /&gt;
MAILDIR_HAM=${HOME}/Maildir/cur&lt;br /&gt;
TMPDIR=${HOME}/sa-learn-tmp&lt;br /&gt;
SPAMFOLDER=Junk&lt;br /&gt;
SPAMFOLDER_LEARNED=${SPAMFOLDER}.sa-learned&lt;br /&gt;
MAILDIR_SPAM=${HOME}/Maildir/.${SPAMFOLDER}&lt;br /&gt;
&lt;br /&gt;
# Learn spam from MAILDIR_SPAM&lt;br /&gt;
mkdir -p ${TMPDIR}/spam&lt;br /&gt;
rm -f ${TMPDIR}/spam/*&lt;br /&gt;
SPAM_COUNT=0&lt;br /&gt;
for DIR in &amp;quot;cur&amp;quot; &amp;quot;new&amp;quot;; do&lt;br /&gt;
	DIR=&amp;quot;${MAILDIR_SPAM}/${DIR}&amp;quot;&lt;br /&gt;
	cd ${DIR}&lt;br /&gt;
	# echo &amp;quot;---&amp;quot; DIR ${DIR}&lt;br /&gt;
	for SPAMFILE in $( ls ); do&lt;br /&gt;
		# echo &amp;quot;   &amp;quot; ${SPAMFILE}&lt;br /&gt;
		TMPFILE=&amp;quot;${TMPDIR}/spam/${SPAMFILE}&amp;quot;&lt;br /&gt;
		if ! zcat &amp;quot;${SPAMFILE}&amp;quot; &amp;gt; &amp;quot;${TMPFILE}&amp;quot; 2&amp;gt;/dev/null; then&lt;br /&gt;
			cp &amp;quot;${SPAMFILE}&amp;quot; &amp;quot;${TMPFILE}&amp;quot;&lt;br /&gt;
		fi&lt;br /&gt;
		SPAM_COUNT=$((SPAM_COUNT + 1))&lt;br /&gt;
	done&lt;br /&gt;
done&lt;br /&gt;
sa-learn --spam ${TMPDIR}/spam/*&lt;br /&gt;
&lt;br /&gt;
# Move processed spam to keep it in another folder&lt;br /&gt;
doveadm move -u $(whoami) INBOX.${SPAMFOLDER_LEARNED} mailbox INBOX.${SPAMFOLDER} all 2&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Learn ham from MAILDIR_HAM (&amp;gt; HAM_MIN_AGE_DAYS days; max. 2x spam count)&lt;br /&gt;
mkdir -p ${TMPDIR}/ham&lt;br /&gt;
rm -f ${TMPDIR}/ham/*&lt;br /&gt;
cd ${MAILDIR_HAM}&lt;br /&gt;
MAX_HAM=$((SPAM_COUNT * 2))&lt;br /&gt;
HAM_COUNT=0&lt;br /&gt;
for HAMFILE in $( find . -type f -mtime +${HAM_MIN_AGE_DAYS} -printf &#039;%T@ %p\n&#039; | sort -rn | cut -d&#039; &#039; -f2- | head -n ${MAX_HAM} ); do&lt;br /&gt;
	TMPFILE=&amp;quot;${TMPDIR}/ham/${HAMFILE}&amp;quot;&lt;br /&gt;
	if ! zcat &amp;quot;${HAMFILE}&amp;quot; &amp;gt; &amp;quot;${TMPFILE}&amp;quot; 2&amp;gt;/dev/null; then&lt;br /&gt;
		cp &amp;quot;${HAMFILE}&amp;quot; &amp;quot;${TMPFILE}&amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
	HAM_COUNT=$((HAM_COUNT + 1))&lt;br /&gt;
done&lt;br /&gt;
sa-learn --ham ${TMPDIR}/ham/*&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Training erfolgte mit ${SPAM_COUNT} Spam, ${HAM_COUNT} (max ${MAX_HAM}) Ham Mails.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei werden Mails verarbeitet, unabhängig davon, ob sie durch Procmail (unkomprimiert) oder über den Mailclient (komprimiert) verschoben vorliegen.&lt;br /&gt;
Für Ham wird ein Teil des Inhalts der Inbox verwendet, wobei die empfohlene Maximalanzahl von zweimal der Spammailanzahl und ein minimales Alter in Tagen gilt. Das Mindestalter garantiert ein inzwischen erfolgtes manuelles Aussortieren des Spams. Der verarbeitete Spam wird anschließend in ein separates Verzeichnis verschoben um den späteren Zugriff auf False Positives zu ermöglichen.&lt;br /&gt;
&lt;br /&gt;
Das Skript wird über einen systemd-Timer täglich ausgeführt, der pro Mailbox eingerichtet werden muss.&lt;br /&gt;
&lt;br /&gt;
= Alternative 3: SecureMX zubuchen =&lt;br /&gt;
&lt;br /&gt;
Über unseren Domain-Anbieter &amp;quot;Partnergate&amp;quot; bietet Hostsharing als dritte Alternative die kommerzielle Spam-Appliance von Cisco an. Das Produkt heißt bei Partnergate &amp;quot;SecureMX&amp;quot;: https://www.hostsharing.net/loesungen/email/spam-abwehr/&lt;br /&gt;
&lt;br /&gt;
Die Nutzung von SecureMX ist kostenpflichtig und wird auf Wunsch vom Hostsharing-Service eingerichtet. &lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass bei der Nutzung von SecureMX alle eingehenden E-Mail Nachrichten über Server geleitet werden, die nicht unter der Kontrolle von Hostsharing stehen und proprietäre Software einsetzen. Dieser Sachverhalt muss vom Mitglied ggf. datenschutzrechtlich bewertet werden.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Spamfilter&amp;diff=7510</id>
		<title>Spamfilter</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Spamfilter&amp;diff=7510"/>
		<updated>2026-02-16T12:31:32Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* Eingangsserver konfigurieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Einrichtung, Konfiguration und Optimierung eines Spamfilters auf den Hostsharing Servern. Der Artikel beschreibt drei alternative Möglichkeiten: &lt;br /&gt;
&lt;br /&gt;
1. Die Nutzung der &amp;quot;xmailin&amp;quot;-Server für eine komplette Domain&lt;br /&gt;
&lt;br /&gt;
2. Die Einrichtung von Spamassassin für das persönliche Postfach&lt;br /&gt;
&lt;br /&gt;
3. Nutzung der Spam-Appliance &amp;quot;SecureMX&amp;quot; für eine komplette Domain&lt;br /&gt;
&lt;br /&gt;
= Alternative 1: Maileingangsserver mit Spamfilter nutzen =&lt;br /&gt;
&lt;br /&gt;
Diese Alternative kann von einer Domain-Administration oder vom &amp;quot;Webmaster on Demand&amp;quot; für eine oder mehrere E-Mail-Domains eingerichtet werden. Ein globaler Sieve-Filter für markiete Spam-Nachrichten ist in der Standard-Konfiguration voreingestellt, &lt;br /&gt;
so dass Nachrichten mit Spam-Bewertung in einen vorhandenen Spam-Ordner einsortiert werden.&lt;br /&gt;
&lt;br /&gt;
Seit einigen Jahren betreibt Hostsharing zusätzlich zu den vorkonfigurierte Maileingangsservern einen zweiten Satz von Maileingangsservern, bei denen Spamassassin bereits beim Annehmen einer E-Mail ausgeführt wird. Aktuell ist eine Gruppe von Eingangsserver mit der Software &amp;quot;rspamd&amp;quot; hinzugekommen. Eingehende Nachrichten mit mit Malware oder sehr hoher Bewertung als Spam werden bereits im SMTP-Dialog abgewiesen. Nachrichten mit einem geringeren Spam-Score werden angenommen und zugestellt. Spamassassin fügt die Bewertung für diese Nachrichten in die Header der Nachricht ein, zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
X-Spam-Status: Yes, score=11.29&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der globale Sieve-Filter schiebt Nachrichten mit der Markierung &amp;quot;X-Spam-Status: Yes&amp;quot; in einen Ordner &amp;quot;Junk&amp;quot;, wenn der Ordner vorhanden ist. Viele Mailprogramme legen beim ersten Verbinden mit dem IMAP-Server einen solchen Ordner an. Unser &amp;quot;Roundcube&amp;quot;&lt;br /&gt;
unter https://webmail.hostsharing.net ist entsprechend eingerichtet, so dass der Ordner nach einer Nutzung von Webmail vorhanden ist.&lt;br /&gt;
&lt;br /&gt;
== Eingangsserver konfigurieren ==&lt;br /&gt;
&lt;br /&gt;
Die Maileingangsserver mit Spamassassin lassen sich pro Domain konfigurieren, indem die MX-Records im DNS-Zonefile gegenüber dem Default-Zonefile angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Im Zonefile entfällt der Platzhalter &amp;quot;{MX_RR}&amp;quot;. Stattdessen werden die folgenden MX-Records eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  10  xmailin1.hostsharing.net.&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  10  xmailin2.hostsharing.net.&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  10  xmailin3.hostsharing.net.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Änderung der DNS-Zone siehe: https://www.hostsharing.net/doc/managed-operations-platform/zonefile/&lt;br /&gt;
Wer sich die Aktion auf der Shell nicht zutraut, möge bitte den &amp;quot;Webmaster on Demand&amp;quot; beauftragen.&lt;br /&gt;
&lt;br /&gt;
Die Änderung des Zonefile kann für eine Domain &amp;quot;hs-example.de&amp;quot; wie folgt überprüft werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
dig +short -t MX hs-example.de @dns1.hostsharing.net&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die folgende Ausgabe wird erwartet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
10 xmailin2.hostsharing.net.&lt;br /&gt;
10 xmailin3.hostsharing.net.&lt;br /&gt;
10 xmailin1.hostsharing.net.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Alternative 2: Persönlichen Spamfilter einrichten =&lt;br /&gt;
&lt;br /&gt;
Hier geht es darum, wie Personen mit (grundlegenden) Kenntnissen in der Shell-Bedienung für ihr persönliches Postfach einen Spam-Filter einrichten können. Spamassassin kann für jedes Postfach individuell konfiguriert werden. Für die Einrichtung und Pflege ist Shell-Zugang zur Mailbox erforderlich.  &lt;br /&gt;
&lt;br /&gt;
Ein Bayesfilter kann mit den persönlichen Nachrichten angelernt werden. Dazu sind tiefergehende Shell-Kenntnisse erforderlich (Shell-Skript und Einrichtung eines systemd-Timers).&lt;br /&gt;
&lt;br /&gt;
== Spamassassin Konfigurieren ==&lt;br /&gt;
&lt;br /&gt;
Der Spamfilter &amp;quot;Spamassassin&amp;quot; ist bei HS vorinstalliert. Es muss über das Kommando &amp;quot;spamc&amp;quot;, das Kommando zur Nutzung des Spamassassin-Daemon, in der Datei &amp;quot;.forward&amp;quot; eines Mail-Users aufgerufen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
&amp;quot;|/usr/bin/spamc -U /var/run/spamd -e /usr/lib/dovecot/deliver&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Effekt: Spammassassin schreibt seine Testergebnisse in die Headerzeilen jeder E-Mail und leitet die E-Mails weiter an das Programm &amp;quot;deliver&amp;quot; aus dem Dovecot-Paket. Das Sortieren von Spam-EMail in einen Spam-Ordner lässt sich mit Sieve-Filtern umsetzen.&lt;br /&gt;
&lt;br /&gt;
In dieser Variante kann man Spamassassin individuell konfigurieren. Dazu legt man im $HOME des Mailbox-Account ein Verzeichnis &amp;quot;$HOME/.spamassassin&amp;quot; an. Die Konfiguration erfolgt in der Datei &amp;quot;$HOME/.spamassassin/user_prefs&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Konfigurationsbeispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
required_score          4.0&lt;br /&gt;
report_safe             0&lt;br /&gt;
use_bayes               1&lt;br /&gt;
bayes_auto_learn        1&lt;br /&gt;
skip_rbl_checks         0&lt;br /&gt;
use_razor2              1&lt;br /&gt;
use_pyzor               1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bayesfilter anlernen ==&lt;br /&gt;
&lt;br /&gt;
Wenn der Bayesfilter eingeschaltet ist, macht es Sinn den Filter mit den Befehlen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sa-learn --spam &amp;lt;platzhalter-spam-nachricht-oder-verzeichnis&amp;gt;&lt;br /&gt;
sa-learn --ham &amp;lt;platzhalter-erwünschte-nachricht-oder-verzeichnis&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
anzulernen. Ein Bash-Skript für das Erlernen von Spam/Nonspam kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
HAM_MIN_AGE_DAYS=5&lt;br /&gt;
MAILDIR_HAM=${HOME}/Maildir/cur&lt;br /&gt;
TMPDIR=${HOME}/sa-learn-tmp&lt;br /&gt;
SPAMFOLDER=Junk&lt;br /&gt;
SPAMFOLDER_LEARNED=${SPAMFOLDER}.sa-learned&lt;br /&gt;
MAILDIR_SPAM=${HOME}/Maildir/.${SPAMFOLDER}&lt;br /&gt;
&lt;br /&gt;
# Learn spam from MAILDIR_SPAM&lt;br /&gt;
mkdir -p ${TMPDIR}/spam&lt;br /&gt;
rm -f ${TMPDIR}/spam/*&lt;br /&gt;
SPAM_COUNT=0&lt;br /&gt;
for DIR in &amp;quot;cur&amp;quot; &amp;quot;new&amp;quot;; do&lt;br /&gt;
	DIR=&amp;quot;${MAILDIR_SPAM}/${DIR}&amp;quot;&lt;br /&gt;
	cd ${DIR}&lt;br /&gt;
	# echo &amp;quot;---&amp;quot; DIR ${DIR}&lt;br /&gt;
	for SPAMFILE in $( ls ); do&lt;br /&gt;
		# echo &amp;quot;   &amp;quot; ${SPAMFILE}&lt;br /&gt;
		TMPFILE=&amp;quot;${TMPDIR}/spam/${SPAMFILE}&amp;quot;&lt;br /&gt;
		if ! zcat &amp;quot;${SPAMFILE}&amp;quot; &amp;gt; &amp;quot;${TMPFILE}&amp;quot; 2&amp;gt;/dev/null; then&lt;br /&gt;
			cp &amp;quot;${SPAMFILE}&amp;quot; &amp;quot;${TMPFILE}&amp;quot;&lt;br /&gt;
		fi&lt;br /&gt;
		SPAM_COUNT=$((SPAM_COUNT + 1))&lt;br /&gt;
	done&lt;br /&gt;
done&lt;br /&gt;
sa-learn --spam ${TMPDIR}/spam/*&lt;br /&gt;
&lt;br /&gt;
# Move processed spam to keep it in another folder&lt;br /&gt;
doveadm move -u $(whoami) INBOX.${SPAMFOLDER_LEARNED} mailbox INBOX.${SPAMFOLDER} all 2&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Learn ham from MAILDIR_HAM (&amp;gt; HAM_MIN_AGE_DAYS days; max. 2x spam count)&lt;br /&gt;
mkdir -p ${TMPDIR}/ham&lt;br /&gt;
rm -f ${TMPDIR}/ham/*&lt;br /&gt;
cd ${MAILDIR_HAM}&lt;br /&gt;
MAX_HAM=$((SPAM_COUNT * 2))&lt;br /&gt;
HAM_COUNT=0&lt;br /&gt;
for HAMFILE in $( find . -type f -mtime +${HAM_MIN_AGE_DAYS} -printf &#039;%T@ %p\n&#039; | sort -rn | cut -d&#039; &#039; -f2- | head -n ${MAX_HAM} ); do&lt;br /&gt;
	TMPFILE=&amp;quot;${TMPDIR}/ham/${HAMFILE}&amp;quot;&lt;br /&gt;
	if ! zcat &amp;quot;${HAMFILE}&amp;quot; &amp;gt; &amp;quot;${TMPFILE}&amp;quot; 2&amp;gt;/dev/null; then&lt;br /&gt;
		cp &amp;quot;${HAMFILE}&amp;quot; &amp;quot;${TMPFILE}&amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
	HAM_COUNT=$((HAM_COUNT + 1))&lt;br /&gt;
done&lt;br /&gt;
sa-learn --ham ${TMPDIR}/ham/*&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Training erfolgte mit ${SPAM_COUNT} Spam, ${HAM_COUNT} (max ${MAX_HAM}) Ham Mails.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei werden Mails verarbeitet, unabhängig davon, ob sie durch Procmail (unkomprimiert) oder über den Mailclient (komprimiert) verschoben vorliegen.&lt;br /&gt;
Für Ham wird ein Teil des Inhalts der Inbox verwendet, wobei die empfohlene Maximalanzahl von zweimal der Spammailanzahl und ein minimales Alter in Tagen gilt. Das Mindestalter garantiert ein inzwischen erfolgtes manuelles Aussortieren des Spams. Der verarbeitete Spam wird anschließend in ein separates Verzeichnis verschoben um den späteren Zugriff auf False Positives zu ermöglichen.&lt;br /&gt;
&lt;br /&gt;
Das Skript wird über einen systemd-Timer täglich ausgeführt, der pro Mailbox eingerichtet werden muss.&lt;br /&gt;
&lt;br /&gt;
= Alternative 3: SecureMX zubuchen =&lt;br /&gt;
&lt;br /&gt;
Über unseren Domain-Anbieter &amp;quot;Partnergate&amp;quot; bietet Hostsharing als dritte Alternative die kommerzielle Spam-Appliance von Cisco an. Das Produkt heißt bei Partnergate &amp;quot;SecureMX&amp;quot;: https://www.hostsharing.net/loesungen/email/spam-abwehr/&lt;br /&gt;
&lt;br /&gt;
Die Nutzung von SecureMX ist kostenpflichtig und wird auf Wunsch vom Hostsharing-Service eingerichtet. &lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass bei der Nutzung von SecureMX alle eingehenden E-Mail Nachrichten über Server geleitet werden, die nicht unter der Kontrolle von Hostsharing stehen und proprietäre Software einsetzen. Dieser Sachverhalt muss vom Mitglied ggf. datenschutzrechtlich bewertet werden.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Spamfilter&amp;diff=7509</id>
		<title>Spamfilter</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Spamfilter&amp;diff=7509"/>
		<updated>2026-02-16T12:29:24Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: smailin -&amp;gt; xmailin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Einrichtung, Konfiguration und Optimierung eines Spamfilters auf den Hostsharing Servern. Der Artikel beschreibt drei alternative Möglichkeiten: &lt;br /&gt;
&lt;br /&gt;
1. Die Nutzung der &amp;quot;xmailin&amp;quot;-Server für eine komplette Domain&lt;br /&gt;
&lt;br /&gt;
2. Die Einrichtung von Spamassassin für das persönliche Postfach&lt;br /&gt;
&lt;br /&gt;
3. Nutzung der Spam-Appliance &amp;quot;SecureMX&amp;quot; für eine komplette Domain&lt;br /&gt;
&lt;br /&gt;
= Alternative 1: Maileingangsserver mit Spamfilter nutzen =&lt;br /&gt;
&lt;br /&gt;
Diese Alternative kann von einer Domain-Administration oder vom &amp;quot;Webmaster on Demand&amp;quot; für eine oder mehrere E-Mail-Domains eingerichtet werden. Ein globaler Sieve-Filter für markiete Spam-Nachrichten ist in der Standard-Konfiguration voreingestellt, &lt;br /&gt;
so dass Nachrichten mit Spam-Bewertung in einen vorhandenen Spam-Ordner einsortiert werden.&lt;br /&gt;
&lt;br /&gt;
Seit einigen Jahren betreibt Hostsharing zusätzlich zu den vorkonfigurierte Maileingangsservern einen zweiten Satz von Maileingangsservern, bei denen Spamassassin bereits beim Annehmen einer E-Mail ausgeführt wird. Aktuell ist eine Gruppe von Eingangsserver mit der Software &amp;quot;rspamd&amp;quot; hinzugekommen. Eingehende Nachrichten mit mit Malware oder sehr hoher Bewertung als Spam werden bereits im SMTP-Dialog abgewiesen. Nachrichten mit einem geringeren Spam-Score werden angenommen und zugestellt. Spamassassin fügt die Bewertung für diese Nachrichten in die Header der Nachricht ein, zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
X-Spam-Status: Yes, score=11.29&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der globale Sieve-Filter schiebt Nachrichten mit der Markierung &amp;quot;X-Spam-Status: Yes&amp;quot; in einen Ordner &amp;quot;Junk&amp;quot;, wenn der Ordner vorhanden ist. Viele Mailprogramme legen beim ersten Verbinden mit dem IMAP-Server einen solchen Ordner an. Unser &amp;quot;Roundcube&amp;quot;&lt;br /&gt;
unter https://webmail.hostsharing.net ist entsprechend eingerichtet, so dass der Ordner nach einer Nutzung von Webmail vorhanden ist.&lt;br /&gt;
&lt;br /&gt;
== Eingangsserver konfigurieren ==&lt;br /&gt;
&lt;br /&gt;
Die Maileingangsserver mit Spamassassin lassen sich pro Domain konfigurieren, indem die MX-Records im DNS-Zonefile gegenüber dem Default-Zonefile angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Im Zonefile entfällt der Platzhalter &amp;quot;{MX_RR}&amp;quot;. Stattdessen werden die folgenden MX-Records eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  10  xmailin1.hostsharing.net.&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  10  xmailin2.hostsharing.net.&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  10  xmailin3.hostsharing.net.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Änderung der DNS-Zone siehe: https://www.hostsharing.net/doc/managed-operations-platform/zonefile/&lt;br /&gt;
Wer sich die Aktion auf der Shell nicht zutraut, möge bitte den &amp;quot;Webmaster on Demand&amp;quot; beauftragen.&lt;br /&gt;
&lt;br /&gt;
Die Änderung des Zonefile kann für eine Domain &amp;quot;hs-example.de&amp;quot; wie folgt überprüft werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
dig +short -t MX hs-example.de @dns1.hostsharing.net&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die folgende Ausgabe wird erwartet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
30 xmailin2.hostsharing.net.&lt;br /&gt;
30 xmailin3.hostsharing.net.&lt;br /&gt;
30 xmailin1.hostsharing.net.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Alternative 2: Persönlichen Spamfilter einrichten =&lt;br /&gt;
&lt;br /&gt;
Hier geht es darum, wie Personen mit (grundlegenden) Kenntnissen in der Shell-Bedienung für ihr persönliches Postfach einen Spam-Filter einrichten können. Spamassassin kann für jedes Postfach individuell konfiguriert werden. Für die Einrichtung und Pflege ist Shell-Zugang zur Mailbox erforderlich.  &lt;br /&gt;
&lt;br /&gt;
Ein Bayesfilter kann mit den persönlichen Nachrichten angelernt werden. Dazu sind tiefergehende Shell-Kenntnisse erforderlich (Shell-Skript und Einrichtung eines systemd-Timers).&lt;br /&gt;
&lt;br /&gt;
== Spamassassin Konfigurieren ==&lt;br /&gt;
&lt;br /&gt;
Der Spamfilter &amp;quot;Spamassassin&amp;quot; ist bei HS vorinstalliert. Es muss über das Kommando &amp;quot;spamc&amp;quot;, das Kommando zur Nutzung des Spamassassin-Daemon, in der Datei &amp;quot;.forward&amp;quot; eines Mail-Users aufgerufen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
&amp;quot;|/usr/bin/spamc -U /var/run/spamd -e /usr/lib/dovecot/deliver&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Effekt: Spammassassin schreibt seine Testergebnisse in die Headerzeilen jeder E-Mail und leitet die E-Mails weiter an das Programm &amp;quot;deliver&amp;quot; aus dem Dovecot-Paket. Das Sortieren von Spam-EMail in einen Spam-Ordner lässt sich mit Sieve-Filtern umsetzen.&lt;br /&gt;
&lt;br /&gt;
In dieser Variante kann man Spamassassin individuell konfigurieren. Dazu legt man im $HOME des Mailbox-Account ein Verzeichnis &amp;quot;$HOME/.spamassassin&amp;quot; an. Die Konfiguration erfolgt in der Datei &amp;quot;$HOME/.spamassassin/user_prefs&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Konfigurationsbeispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
required_score          4.0&lt;br /&gt;
report_safe             0&lt;br /&gt;
use_bayes               1&lt;br /&gt;
bayes_auto_learn        1&lt;br /&gt;
skip_rbl_checks         0&lt;br /&gt;
use_razor2              1&lt;br /&gt;
use_pyzor               1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bayesfilter anlernen ==&lt;br /&gt;
&lt;br /&gt;
Wenn der Bayesfilter eingeschaltet ist, macht es Sinn den Filter mit den Befehlen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sa-learn --spam &amp;lt;platzhalter-spam-nachricht-oder-verzeichnis&amp;gt;&lt;br /&gt;
sa-learn --ham &amp;lt;platzhalter-erwünschte-nachricht-oder-verzeichnis&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
anzulernen. Ein Bash-Skript für das Erlernen von Spam/Nonspam kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
HAM_MIN_AGE_DAYS=5&lt;br /&gt;
MAILDIR_HAM=${HOME}/Maildir/cur&lt;br /&gt;
TMPDIR=${HOME}/sa-learn-tmp&lt;br /&gt;
SPAMFOLDER=Junk&lt;br /&gt;
SPAMFOLDER_LEARNED=${SPAMFOLDER}.sa-learned&lt;br /&gt;
MAILDIR_SPAM=${HOME}/Maildir/.${SPAMFOLDER}&lt;br /&gt;
&lt;br /&gt;
# Learn spam from MAILDIR_SPAM&lt;br /&gt;
mkdir -p ${TMPDIR}/spam&lt;br /&gt;
rm -f ${TMPDIR}/spam/*&lt;br /&gt;
SPAM_COUNT=0&lt;br /&gt;
for DIR in &amp;quot;cur&amp;quot; &amp;quot;new&amp;quot;; do&lt;br /&gt;
	DIR=&amp;quot;${MAILDIR_SPAM}/${DIR}&amp;quot;&lt;br /&gt;
	cd ${DIR}&lt;br /&gt;
	# echo &amp;quot;---&amp;quot; DIR ${DIR}&lt;br /&gt;
	for SPAMFILE in $( ls ); do&lt;br /&gt;
		# echo &amp;quot;   &amp;quot; ${SPAMFILE}&lt;br /&gt;
		TMPFILE=&amp;quot;${TMPDIR}/spam/${SPAMFILE}&amp;quot;&lt;br /&gt;
		if ! zcat &amp;quot;${SPAMFILE}&amp;quot; &amp;gt; &amp;quot;${TMPFILE}&amp;quot; 2&amp;gt;/dev/null; then&lt;br /&gt;
			cp &amp;quot;${SPAMFILE}&amp;quot; &amp;quot;${TMPFILE}&amp;quot;&lt;br /&gt;
		fi&lt;br /&gt;
		SPAM_COUNT=$((SPAM_COUNT + 1))&lt;br /&gt;
	done&lt;br /&gt;
done&lt;br /&gt;
sa-learn --spam ${TMPDIR}/spam/*&lt;br /&gt;
&lt;br /&gt;
# Move processed spam to keep it in another folder&lt;br /&gt;
doveadm move -u $(whoami) INBOX.${SPAMFOLDER_LEARNED} mailbox INBOX.${SPAMFOLDER} all 2&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Learn ham from MAILDIR_HAM (&amp;gt; HAM_MIN_AGE_DAYS days; max. 2x spam count)&lt;br /&gt;
mkdir -p ${TMPDIR}/ham&lt;br /&gt;
rm -f ${TMPDIR}/ham/*&lt;br /&gt;
cd ${MAILDIR_HAM}&lt;br /&gt;
MAX_HAM=$((SPAM_COUNT * 2))&lt;br /&gt;
HAM_COUNT=0&lt;br /&gt;
for HAMFILE in $( find . -type f -mtime +${HAM_MIN_AGE_DAYS} -printf &#039;%T@ %p\n&#039; | sort -rn | cut -d&#039; &#039; -f2- | head -n ${MAX_HAM} ); do&lt;br /&gt;
	TMPFILE=&amp;quot;${TMPDIR}/ham/${HAMFILE}&amp;quot;&lt;br /&gt;
	if ! zcat &amp;quot;${HAMFILE}&amp;quot; &amp;gt; &amp;quot;${TMPFILE}&amp;quot; 2&amp;gt;/dev/null; then&lt;br /&gt;
		cp &amp;quot;${HAMFILE}&amp;quot; &amp;quot;${TMPFILE}&amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
	HAM_COUNT=$((HAM_COUNT + 1))&lt;br /&gt;
done&lt;br /&gt;
sa-learn --ham ${TMPDIR}/ham/*&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Training erfolgte mit ${SPAM_COUNT} Spam, ${HAM_COUNT} (max ${MAX_HAM}) Ham Mails.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei werden Mails verarbeitet, unabhängig davon, ob sie durch Procmail (unkomprimiert) oder über den Mailclient (komprimiert) verschoben vorliegen.&lt;br /&gt;
Für Ham wird ein Teil des Inhalts der Inbox verwendet, wobei die empfohlene Maximalanzahl von zweimal der Spammailanzahl und ein minimales Alter in Tagen gilt. Das Mindestalter garantiert ein inzwischen erfolgtes manuelles Aussortieren des Spams. Der verarbeitete Spam wird anschließend in ein separates Verzeichnis verschoben um den späteren Zugriff auf False Positives zu ermöglichen.&lt;br /&gt;
&lt;br /&gt;
Das Skript wird über einen systemd-Timer täglich ausgeführt, der pro Mailbox eingerichtet werden muss.&lt;br /&gt;
&lt;br /&gt;
= Alternative 3: SecureMX zubuchen =&lt;br /&gt;
&lt;br /&gt;
Über unseren Domain-Anbieter &amp;quot;Partnergate&amp;quot; bietet Hostsharing als dritte Alternative die kommerzielle Spam-Appliance von Cisco an. Das Produkt heißt bei Partnergate &amp;quot;SecureMX&amp;quot;: https://www.hostsharing.net/loesungen/email/spam-abwehr/&lt;br /&gt;
&lt;br /&gt;
Die Nutzung von SecureMX ist kostenpflichtig und wird auf Wunsch vom Hostsharing-Service eingerichtet. &lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass bei der Nutzung von SecureMX alle eingehenden E-Mail Nachrichten über Server geleitet werden, die nicht unter der Kontrolle von Hostsharing stehen und proprietäre Software einsetzen. Dieser Sachverhalt muss vom Mitglied ggf. datenschutzrechtlich bewertet werden.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Spamfilter&amp;diff=7508</id>
		<title>Spamfilter</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Spamfilter&amp;diff=7508"/>
		<updated>2026-02-16T12:02:01Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: Umstellunge der Reihenfolge&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Einrichtung, Konfiguration und Optimierung eines Spamfilters auf den Hostsharing Servern. Der Artikel beschreibt drei alternative Möglichkeiten: &lt;br /&gt;
&lt;br /&gt;
1. Die Nutzung der &amp;quot;smailin&amp;quot;-Server für eine komplette Domain&lt;br /&gt;
&lt;br /&gt;
2. Die Einrichtung von Spamassassin für das persönliche Postfach&lt;br /&gt;
&lt;br /&gt;
3. Nutzung der Spam-Appliance &amp;quot;SecureMX&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= Alternative 1: Maileingangsserver mit Spamfilter nutzen =&lt;br /&gt;
&lt;br /&gt;
Diese Alternative kann von einem Domain-Administrator oder vom &amp;quot;Webmaster on Demand&amp;quot; für eine oder mehrere E-Mail-Domains eingerichtet werden. Die einzelnen Nutzer:innen können mit Hilfe des Hostsharing-Webmail einen Filter einrichten, so dass verdächtige Nachrichten in einem Spam-Ordner einsortiert werden.&lt;br /&gt;
&lt;br /&gt;
Seit einigen Jahren betreibt Hostsharing zusätzlich zu den vorkonfigurierte Maileingangsservern einen zweiten Satz von Maileingangsservern, bei denen Spamassassin bereits beim Annehmen einer E-Mail ausgeführt wird. Eingehende Nachrichten mit eindeutiger Bewertung als Spam werden bereits im SMTP-Dialog abgewiesen. Nachrichten mit einem Spam-Score über 5 Punkten werden angenommen und zugestellt. Spamassassin fügt die Bewertung für diese Nachrichten in die Header der Nachricht ein, zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
X-Spam-Flag: YES&lt;br /&gt;
X-Spam-Score: 6.263&lt;br /&gt;
X-Spam-Level: ******&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anhand dieser Zeilen kann man in Roundcube Filter einrichten, die die Nachrichten beim Eingehen der Nachricht in einen Spam-Ordner mit verdächtigen Nachrichten verschieben (siehe später folgenden Abschnitt).&lt;br /&gt;
&lt;br /&gt;
== Eingangsserver konfigurieren ==&lt;br /&gt;
&lt;br /&gt;
Die Maileingangsserver mit Spamassassin lassen sich pro Domain konfigurieren, indem die MX-Records im DNS-Zonefile gegenüber dem Default-Zonefile angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Im Zonefile entfällt der Platzhalter &amp;quot;{MX_RR}&amp;quot;. Stattdessen werden die folgenden MX-Records eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  10  smailin1.hostsharing.net.&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  10  smailin2.hostsharing.net.&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  10  smailin3.hostsharing.net.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Änderung der DNS-Zone siehe: https://www.hostsharing.net/doc/managed-operations-platform/zonefile/&lt;br /&gt;
Wer sich die Aktion auf der Shell nicht zutraut, möge bitte den &amp;quot;Webmaster on Demand&amp;quot; beauftragen.&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
* xmailin1,2,3 ergänzen&lt;br /&gt;
* Kontrolle der MX-Record mit &amp;quot;dig&amp;quot;&lt;br /&gt;
* Sieve Filter kann entfallen, weil global konfiguriert!&lt;br /&gt;
&lt;br /&gt;
== Spam-Ordner ==&lt;br /&gt;
&lt;br /&gt;
Mit dem folgenden Filter können Nachrichten, die von Spamassassin markiert wurden, automatisch in einen Spam-Ordner verschoben werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:2025-02-07 Sievefilter-Spam.png|960x480px|gerahmt|links|alternativtext=Screenshot Filterregel zum Spam Aussortieren|Filter in Roundcube einrichten]]&lt;br /&gt;
&lt;br /&gt;
= Alternative 2: Persönlichen Spamfilter einrichten =&lt;br /&gt;
&lt;br /&gt;
Hier geht es darum, wie Personen mit (grundlegenden) Kenntnissen in der Shell-Bedienung für ihr persönliches Postfach einen Spam-Filter einrichten können. Spamassassin kann für jedes Postfach individuell konfiguriert werden. Für die Einrichtung und Pflege ist Shell-Zugang zur Mailbox erforderlich.  &lt;br /&gt;
&lt;br /&gt;
Ein Bayesfilter kann mit den persönlichen Nachrichten angelernt werden. Dazu sind tiefergehende Shell-Kenntnisse erforderlich (Shell-Skript und Einrichtung eines systemd-Timers).&lt;br /&gt;
&lt;br /&gt;
== Spamassassin Konfigurieren ==&lt;br /&gt;
&lt;br /&gt;
Der Spamfilter &amp;quot;Spamassassin&amp;quot; ist bei HS vorinstalliert. Es muss über das Kommando &amp;quot;spamc&amp;quot;, das Kommando zur Nutzung des Spamassassin-Daemon, in der Datei &amp;quot;.forward&amp;quot; eines Mail-Users aufgerufen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
&amp;quot;|/usr/bin/spamc -U /var/run/spamd -e /usr/lib/dovecot/deliver&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Effekt: Spammassassin schreibt seine Testergebnisse in die Headerzeilen jeder E-Mail und leitet die E-Mails weiter an das Programm &amp;quot;deliver&amp;quot; aus dem Dovecot-Paket. Das Sortieren von Spam-EMail in einen Spam-Ordner lässt sich mit Sieve-Filtern umsetzen.&lt;br /&gt;
&lt;br /&gt;
In dieser Variante kann man Spamassassin individuell konfigurieren. Dazu legt man im $HOME des Mailbox-Account ein Verzeichnis &amp;quot;$HOME/.spamassassin&amp;quot; an. Die Konfiguration erfolgt in der Datei &amp;quot;$HOME/.spamassassin/user_prefs&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Konfigurationsbeispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
required_score          4.0&lt;br /&gt;
report_safe             0&lt;br /&gt;
use_bayes               1&lt;br /&gt;
bayes_auto_learn        1&lt;br /&gt;
skip_rbl_checks         0&lt;br /&gt;
use_razor2              1&lt;br /&gt;
use_pyzor               1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bayesfilter anlernen ==&lt;br /&gt;
&lt;br /&gt;
Wenn der Bayesfilter eingeschaltet ist, macht es Sinn den Filter mit den Befehlen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sa-learn --spam &amp;lt;platzhalter-spam-nachricht-oder-verzeichnis&amp;gt;&lt;br /&gt;
sa-learn --ham &amp;lt;platzhalter-erwünschte-nachricht-oder-verzeichnis&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
anzulernen. Ein Bash-Skript für das Erlernen von Spam/Nonspam kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
HAM_MIN_AGE_DAYS=5&lt;br /&gt;
MAILDIR_HAM=${HOME}/Maildir/cur&lt;br /&gt;
TMPDIR=${HOME}/sa-learn-tmp&lt;br /&gt;
SPAMFOLDER=Junk&lt;br /&gt;
SPAMFOLDER_LEARNED=${SPAMFOLDER}.sa-learned&lt;br /&gt;
MAILDIR_SPAM=${HOME}/Maildir/.${SPAMFOLDER}&lt;br /&gt;
&lt;br /&gt;
# Learn spam from MAILDIR_SPAM&lt;br /&gt;
mkdir -p ${TMPDIR}/spam&lt;br /&gt;
rm -f ${TMPDIR}/spam/*&lt;br /&gt;
SPAM_COUNT=0&lt;br /&gt;
for DIR in &amp;quot;cur&amp;quot; &amp;quot;new&amp;quot;; do&lt;br /&gt;
	DIR=&amp;quot;${MAILDIR_SPAM}/${DIR}&amp;quot;&lt;br /&gt;
	cd ${DIR}&lt;br /&gt;
	# echo &amp;quot;---&amp;quot; DIR ${DIR}&lt;br /&gt;
	for SPAMFILE in $( ls ); do&lt;br /&gt;
		# echo &amp;quot;   &amp;quot; ${SPAMFILE}&lt;br /&gt;
		TMPFILE=&amp;quot;${TMPDIR}/spam/${SPAMFILE}&amp;quot;&lt;br /&gt;
		if ! zcat &amp;quot;${SPAMFILE}&amp;quot; &amp;gt; &amp;quot;${TMPFILE}&amp;quot; 2&amp;gt;/dev/null; then&lt;br /&gt;
			cp &amp;quot;${SPAMFILE}&amp;quot; &amp;quot;${TMPFILE}&amp;quot;&lt;br /&gt;
		fi&lt;br /&gt;
		SPAM_COUNT=$((SPAM_COUNT + 1))&lt;br /&gt;
	done&lt;br /&gt;
done&lt;br /&gt;
sa-learn --spam ${TMPDIR}/spam/*&lt;br /&gt;
&lt;br /&gt;
# Move processed spam to keep it in another folder&lt;br /&gt;
doveadm move -u $(whoami) INBOX.${SPAMFOLDER_LEARNED} mailbox INBOX.${SPAMFOLDER} all 2&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Learn ham from MAILDIR_HAM (&amp;gt; HAM_MIN_AGE_DAYS days; max. 2x spam count)&lt;br /&gt;
mkdir -p ${TMPDIR}/ham&lt;br /&gt;
rm -f ${TMPDIR}/ham/*&lt;br /&gt;
cd ${MAILDIR_HAM}&lt;br /&gt;
MAX_HAM=$((SPAM_COUNT * 2))&lt;br /&gt;
HAM_COUNT=0&lt;br /&gt;
for HAMFILE in $( find . -type f -mtime +${HAM_MIN_AGE_DAYS} -printf &#039;%T@ %p\n&#039; | sort -rn | cut -d&#039; &#039; -f2- | head -n ${MAX_HAM} ); do&lt;br /&gt;
	TMPFILE=&amp;quot;${TMPDIR}/ham/${HAMFILE}&amp;quot;&lt;br /&gt;
	if ! zcat &amp;quot;${HAMFILE}&amp;quot; &amp;gt; &amp;quot;${TMPFILE}&amp;quot; 2&amp;gt;/dev/null; then&lt;br /&gt;
		cp &amp;quot;${HAMFILE}&amp;quot; &amp;quot;${TMPFILE}&amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
	HAM_COUNT=$((HAM_COUNT + 1))&lt;br /&gt;
done&lt;br /&gt;
sa-learn --ham ${TMPDIR}/ham/*&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Training erfolgte mit ${SPAM_COUNT} Spam, ${HAM_COUNT} (max ${MAX_HAM}) Ham Mails.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei werden Mails verarbeitet, unabhängig davon, ob sie durch Procmail (unkomprimiert) oder über den Mailclient (komprimiert) verschoben vorliegen.&lt;br /&gt;
Für Ham wird ein Teil des Inhalts der Inbox verwendet, wobei die empfohlene Maximalanzahl von zweimal der Spammailanzahl und ein minimales Alter in Tagen gilt. Das Mindestalter garantiert ein inzwischen erfolgtes manuelles Aussortieren des Spams. Der verarbeitete Spam wird anschließend in ein separates Verzeichnis verschoben um den späteren Zugriff auf False Positives zu ermöglichen.&lt;br /&gt;
&lt;br /&gt;
Das Skript wird über einen systemd-Timer täglich ausgeführt, der pro Mailbox eingerichtet werden muss.&lt;br /&gt;
&lt;br /&gt;
= Alternative 3: SecureMX zubuchen =&lt;br /&gt;
&lt;br /&gt;
Über unseren Domain-Anbieter &amp;quot;Partnergate&amp;quot; bietet Hostsharing als dritte Alternative die kommerzielle Spam-Appliance von Cisco an. Das Produkt heißt bei Partnergate &amp;quot;SecureMX&amp;quot;: https://www.hostsharing.net/loesungen/email/spam-abwehr/&lt;br /&gt;
&lt;br /&gt;
Die Nutzung von SecureMX ist kostenpflichtig und wird auf Wunsch vom Hostsharing-Service eingerichtet. &lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass bei der Nutzung von SecureMX alle eingehenden E-Mail Nachrichten über Server geleitet werden, die nicht unter der Kontrolle von Hostsharing stehen und proprietäre Software einsetzen. Dieser Sachverhalt muss vom Mitglied ggf. datenschutzrechtlich bewertet werden.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Spamfilter&amp;diff=7507</id>
		<title>Spamfilter</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Spamfilter&amp;diff=7507"/>
		<updated>2026-02-16T11:52:06Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* Eingangsserver konfigurieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Einrichtung, Konfiguration und Optimierung eines Spamfilters auf den Hostsharing Servern. Der Artikel beschreibt drei alternative Möglichkeiten: &lt;br /&gt;
&lt;br /&gt;
1. Die Einrichtung von Spamassassin für das persönliche Postfach&lt;br /&gt;
&lt;br /&gt;
2. Die Nutzung der &amp;quot;smailin&amp;quot;-Server für eine komplette Domain&lt;br /&gt;
&lt;br /&gt;
3. Nutzung der Spam-Appliance &amp;quot;SecureMX&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= Alternative 1: Persönlichen Spamfilter einrichten =&lt;br /&gt;
&lt;br /&gt;
Hier geht es darum, wie Personen mit (grundlegenden) Kenntnissen in der Shell-Bedienung für ihr persönliches Postfach einen Spam-Filter einrichten können. Spamassassin kann für jedes Postfach individuell konfiguriert werden. Für die Einrichtung und Pflege ist Shell-Zugang zur Mailbox erforderlich.  &lt;br /&gt;
&lt;br /&gt;
Ein Bayesfilter kann mit den persönlichen Nachrichten angelernt werden. Dazu sind tiefergehende Shell-Kenntnisse erforderlich (Shell-Skript und Einrichtung eines systemd-Timers).&lt;br /&gt;
&lt;br /&gt;
== Spamassassin Konfigurieren ==&lt;br /&gt;
&lt;br /&gt;
Der Spamfilter &amp;quot;Spamassassin&amp;quot; ist bei HS vorinstalliert. Es muss über das Kommando &amp;quot;spamc&amp;quot;, das Kommando zur Nutzung des Spamassassin-Daemon, in der Datei &amp;quot;.forward&amp;quot; eines Mail-Users aufgerufen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
&amp;quot;|/usr/bin/spamc -U /var/run/spamd -e /usr/lib/dovecot/deliver&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Effekt: Spammassassin schreibt seine Testergebnisse in die Headerzeilen jeder E-Mail und leitet die E-Mails weiter an das Programm &amp;quot;deliver&amp;quot; aus dem Dovecot-Paket. Das Sortieren von Spam-EMail in einen Spam-Ordner lässt sich mit Sieve-Filtern umsetzen.&lt;br /&gt;
&lt;br /&gt;
In dieser Variante kann man Spamassassin individuell konfigurieren. Dazu legt man im $HOME des Mailbox-Account ein Verzeichnis &amp;quot;$HOME/.spamassassin&amp;quot; an. Die Konfiguration erfolgt in der Datei &amp;quot;$HOME/.spamassassin/user_prefs&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Konfigurationsbeispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
required_score          4.0&lt;br /&gt;
report_safe             0&lt;br /&gt;
use_bayes               1&lt;br /&gt;
bayes_auto_learn        1&lt;br /&gt;
skip_rbl_checks         0&lt;br /&gt;
use_razor2              1&lt;br /&gt;
use_pyzor               1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bayesfilter anlernen ==&lt;br /&gt;
&lt;br /&gt;
Wenn der Bayesfilter eingeschaltet ist, macht es Sinn den Filter mit den Befehlen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sa-learn --spam &amp;lt;platzhalter-spam-nachricht-oder-verzeichnis&amp;gt;&lt;br /&gt;
sa-learn --ham &amp;lt;platzhalter-erwünschte-nachricht-oder-verzeichnis&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
anzulernen. Ein Bash-Skript für das Erlernen von Spam/Nonspam kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
HAM_MIN_AGE_DAYS=5&lt;br /&gt;
MAILDIR_HAM=${HOME}/Maildir/cur&lt;br /&gt;
TMPDIR=${HOME}/sa-learn-tmp&lt;br /&gt;
SPAMFOLDER=Junk&lt;br /&gt;
SPAMFOLDER_LEARNED=${SPAMFOLDER}.sa-learned&lt;br /&gt;
MAILDIR_SPAM=${HOME}/Maildir/.${SPAMFOLDER}&lt;br /&gt;
&lt;br /&gt;
# Learn spam from MAILDIR_SPAM&lt;br /&gt;
mkdir -p ${TMPDIR}/spam&lt;br /&gt;
rm -f ${TMPDIR}/spam/*&lt;br /&gt;
SPAM_COUNT=0&lt;br /&gt;
for DIR in &amp;quot;cur&amp;quot; &amp;quot;new&amp;quot;; do&lt;br /&gt;
	DIR=&amp;quot;${MAILDIR_SPAM}/${DIR}&amp;quot;&lt;br /&gt;
	cd ${DIR}&lt;br /&gt;
	# echo &amp;quot;---&amp;quot; DIR ${DIR}&lt;br /&gt;
	for SPAMFILE in $( ls ); do&lt;br /&gt;
		# echo &amp;quot;   &amp;quot; ${SPAMFILE}&lt;br /&gt;
		TMPFILE=&amp;quot;${TMPDIR}/spam/${SPAMFILE}&amp;quot;&lt;br /&gt;
		if ! zcat &amp;quot;${SPAMFILE}&amp;quot; &amp;gt; &amp;quot;${TMPFILE}&amp;quot; 2&amp;gt;/dev/null; then&lt;br /&gt;
			cp &amp;quot;${SPAMFILE}&amp;quot; &amp;quot;${TMPFILE}&amp;quot;&lt;br /&gt;
		fi&lt;br /&gt;
		SPAM_COUNT=$((SPAM_COUNT + 1))&lt;br /&gt;
	done&lt;br /&gt;
done&lt;br /&gt;
sa-learn --spam ${TMPDIR}/spam/*&lt;br /&gt;
&lt;br /&gt;
# Move processed spam to keep it in another folder&lt;br /&gt;
doveadm move -u $(whoami) INBOX.${SPAMFOLDER_LEARNED} mailbox INBOX.${SPAMFOLDER} all 2&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Learn ham from MAILDIR_HAM (&amp;gt; HAM_MIN_AGE_DAYS days; max. 2x spam count)&lt;br /&gt;
mkdir -p ${TMPDIR}/ham&lt;br /&gt;
rm -f ${TMPDIR}/ham/*&lt;br /&gt;
cd ${MAILDIR_HAM}&lt;br /&gt;
MAX_HAM=$((SPAM_COUNT * 2))&lt;br /&gt;
HAM_COUNT=0&lt;br /&gt;
for HAMFILE in $( find . -type f -mtime +${HAM_MIN_AGE_DAYS} -printf &#039;%T@ %p\n&#039; | sort -rn | cut -d&#039; &#039; -f2- | head -n ${MAX_HAM} ); do&lt;br /&gt;
	TMPFILE=&amp;quot;${TMPDIR}/ham/${HAMFILE}&amp;quot;&lt;br /&gt;
	if ! zcat &amp;quot;${HAMFILE}&amp;quot; &amp;gt; &amp;quot;${TMPFILE}&amp;quot; 2&amp;gt;/dev/null; then&lt;br /&gt;
		cp &amp;quot;${HAMFILE}&amp;quot; &amp;quot;${TMPFILE}&amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
	HAM_COUNT=$((HAM_COUNT + 1))&lt;br /&gt;
done&lt;br /&gt;
sa-learn --ham ${TMPDIR}/ham/*&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Training erfolgte mit ${SPAM_COUNT} Spam, ${HAM_COUNT} (max ${MAX_HAM}) Ham Mails.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei werden Mails verarbeitet, unabhängig davon, ob sie durch Procmail (unkomprimiert) oder über den Mailclient (komprimiert) verschoben vorliegen.&lt;br /&gt;
Für Ham wird ein Teil des Inhalts der Inbox verwendet, wobei die empfohlene Maximalanzahl von zweimal der Spammailanzahl und ein minimales Alter in Tagen gilt. Das Mindestalter garantiert ein inzwischen erfolgtes manuelles Aussortieren des Spams. Der verarbeitete Spam wird anschließend in ein separates Verzeichnis verschoben um den späteren Zugriff auf False Positives zu ermöglichen.&lt;br /&gt;
&lt;br /&gt;
Das Skript wird über einen systemd-Timer täglich ausgeführt, der pro Mailbox eingerichtet werden muss.&lt;br /&gt;
&lt;br /&gt;
= Alternative 2: Maileingangsserver mit Spamfilter nutzen =&lt;br /&gt;
&lt;br /&gt;
Diese Alternative kann von einem Domain-Administrator oder vom &amp;quot;Webmaster on Demand&amp;quot; für eine oder mehrere E-Mail-Domains eingerichtet werden. Die einzelnen Nutzer:innen können mit Hilfe des Hostsharing-Webmail einen Filter einrichten, so dass verdächtige Nachrichten in einem Spam-Ordner einsortiert werden.&lt;br /&gt;
&lt;br /&gt;
Seit einigen Jahren betreibt Hostsharing zusätzlich zu den vorkonfigurierte Maileingangsservern einen zweiten Satz von Maileingangsservern, bei denen Spamassassin bereits beim Annehmen einer E-Mail ausgeführt wird. Eingehende Nachrichten mit eindeutiger Bewertung als Spam werden bereits im SMTP-Dialog abgewiesen. Nachrichten mit einem Spam-Score über 5 Punkten werden angenommen und zugestellt. Spamassassin fügt die Bewertung für diese Nachrichten in die Header der Nachricht ein, zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
X-Spam-Flag: YES&lt;br /&gt;
X-Spam-Score: 6.263&lt;br /&gt;
X-Spam-Level: ******&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anhand dieser Zeilen kann man in Roundcube Filter einrichten, die die Nachrichten beim Eingehen der Nachricht in einen Spam-Ordner mit verdächtigen Nachrichten verschieben (siehe später folgenden Abschnitt).&lt;br /&gt;
&lt;br /&gt;
== Eingangsserver konfigurieren ==&lt;br /&gt;
&lt;br /&gt;
Die Maileingangsserver mit Spamassassin lassen sich pro Domain konfigurieren, indem die MX-Records im DNS-Zonefile gegenüber dem Default-Zonefile angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Im Zonefile entfällt der Platzhalter &amp;quot;{MX_RR}&amp;quot;. Stattdessen werden die folgenden MX-Records eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  10  smailin1.hostsharing.net.&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  10  smailin2.hostsharing.net.&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  10  smailin3.hostsharing.net.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Änderung der DNS-Zone siehe: https://www.hostsharing.net/doc/managed-operations-platform/zonefile/&lt;br /&gt;
Wer sich die Aktion auf der Shell nicht zutraut, möge bitte den &amp;quot;Webmaster on Demand&amp;quot; beauftragen.&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
* xmailin1,2,3 ergänzen&lt;br /&gt;
* Kontrolle der MX-Record mit &amp;quot;dig&amp;quot;&lt;br /&gt;
* Sieve Filter kann entfallen, weil global konfiguriert!&lt;br /&gt;
&lt;br /&gt;
== Spam-Ordner ==&lt;br /&gt;
&lt;br /&gt;
Mit dem folgenden Filter können Nachrichten, die von Spamassassin markiert wurden, automatisch in einen Spam-Ordner verschoben werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:2025-02-07 Sievefilter-Spam.png|960x480px|gerahmt|links|alternativtext=Screenshot Filterregel zum Spam Aussortieren|Filter in Roundcube einrichten]]&lt;br /&gt;
&lt;br /&gt;
= Alternative 3: SecureMX zubuchen =&lt;br /&gt;
&lt;br /&gt;
Über unseren Domain-Anbieter &amp;quot;Partnergate&amp;quot; bietet Hostsharing als dritte Alternative die kommerzielle Spam-Appliance von Cisco an. Das Produkt heißt bei Partnergate &amp;quot;SecureMX&amp;quot;: https://www.hostsharing.net/loesungen/email/spam-abwehr/&lt;br /&gt;
&lt;br /&gt;
Die Nutzung von SecureMX ist kostenpflichtig und wird auf Wunsch vom Hostsharing-Service eingerichtet. &lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass bei der Nutzung von SecureMX alle eingehenden E-Mail Nachrichten über Server geleitet werden, die nicht unter der Kontrolle von Hostsharing stehen und proprietäre Software einsetzen. Dieser Sachverhalt muss vom Mitglied ggf. datenschutzrechtlich bewertet werden.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Spamfilter&amp;diff=7463</id>
		<title>Spamfilter</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Spamfilter&amp;diff=7463"/>
		<updated>2025-12-17T11:11:07Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* Spamassassin Konfigurieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Einrichtung, Konfiguration und Optimierung eines Spamfilters auf den Hostsharing Servern. Der Artikel beschreibt drei alternative Möglichkeiten: &lt;br /&gt;
&lt;br /&gt;
1. Die Einrichtung von Spamassassin für das persönliche Postfach&lt;br /&gt;
&lt;br /&gt;
2. Die Nutzung der &amp;quot;smailin&amp;quot;-Server für eine komplette Domain&lt;br /&gt;
&lt;br /&gt;
3. Nutzung der Spam-Appliance &amp;quot;SecureMX&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= Alternative 1: Persönlichen Spamfilter einrichten =&lt;br /&gt;
&lt;br /&gt;
Hier geht es darum, wie Personen mit (grundlegenden) Kenntnissen in der Shell-Bedienung für ihr persönliches Postfach einen Spam-Filter einrichten können. Spamassassin kann für jedes Postfach individuell konfiguriert werden. Für die Einrichtung und Pflege ist Shell-Zugang zur Mailbox erforderlich.  &lt;br /&gt;
&lt;br /&gt;
Ein Bayesfilter kann mit den persönlichen Nachrichten angelernt werden. Dazu sind tiefergehende Shell-Kenntnisse erforderlich (Shell-Skript und Einrichtung eines systemd-Timers).&lt;br /&gt;
&lt;br /&gt;
== Spamassassin Konfigurieren ==&lt;br /&gt;
&lt;br /&gt;
Der Spamfilter &amp;quot;Spamassassin&amp;quot; ist bei HS vorinstalliert. Es muss über das Kommando &amp;quot;spamc&amp;quot;, das Kommando zur Nutzung des Spamassassin-Daemon, in der Datei &amp;quot;.forward&amp;quot; eines Mail-Users aufgerufen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
&amp;quot;|/usr/bin/spamc -U /var/run/spamd -e /usr/lib/dovecot/deliver&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Effekt: Spammassassin schreibt seine Testergebnisse in die Headerzeilen jeder E-Mail und leitet die E-Mails weiter an das Programm &amp;quot;deliver&amp;quot; aus dem Dovecot-Paket. Das Sortieren von Spam-EMail in einen Spam-Ordner lässt sich mit Sieve-Filtern umsetzen.&lt;br /&gt;
&lt;br /&gt;
In dieser Variante kann man Spamassassin individuell konfigurieren. Dazu legt man im $HOME des Mailbox-Account ein Verzeichnis &amp;quot;$HOME/.spamassassin&amp;quot; an. Die Konfiguration erfolgt in der Datei &amp;quot;$HOME/.spamassassin/user_prefs&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Konfigurationsbeispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
required_score          4.0&lt;br /&gt;
report_safe             0&lt;br /&gt;
use_bayes               1&lt;br /&gt;
bayes_auto_learn        1&lt;br /&gt;
skip_rbl_checks         0&lt;br /&gt;
use_razor2              1&lt;br /&gt;
use_pyzor               1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bayesfilter anlernen ==&lt;br /&gt;
&lt;br /&gt;
Wenn der Bayesfilter eingeschaltet ist, macht es Sinn den Filter mit den Befehlen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sa-learn --spam &amp;lt;platzhalter-spam-nachricht&amp;gt;&lt;br /&gt;
sa-learn --ham &amp;lt;platzhalter-erwünschte-nachricht&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
anzulernen. Ein Bash-Skript für das Erlernen von Spam/Nonspam kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# Learn Spam from Maildir folder Junk/LearnSpam&lt;br /&gt;
# &lt;br /&gt;
mkdir -p ${HOME}/sa-learn-tmp&lt;br /&gt;
cd ${HOME}/Maildir/.Junk.LearnSpam/cur/&lt;br /&gt;
for JUNK in $( ls ); do zcat ${JUNK} &amp;gt; ${HOME}/sa-learn-tmp/$( echo ${JUNK} | cut -d&#039;.&#039; -f2 ).eml ; done&lt;br /&gt;
cd ${HOME}/&lt;br /&gt;
sa-learn --spam ${HOME}/sa-learn-tmp/*.eml&lt;br /&gt;
rm -f ${HOME}/sa-learn-tmp/*.eml&lt;br /&gt;
rm -f ${HOME}/Maildir/.Junk.LearnSpam/cur/*&lt;br /&gt;
#&lt;br /&gt;
# Learn Non-Spam from Maildir folder Junk/LearnHam&lt;br /&gt;
# &lt;br /&gt;
cd ${HOME}/Maildir/.Junk.LearnHam/cur/&lt;br /&gt;
for HAM in $( ls ); do zcat ${HAM} &amp;gt; ${HOME}/sa-learn-tmp/$( echo ${HAM} | cut -d&#039;.&#039; -f2 ).eml ; done&lt;br /&gt;
cd ${HOME}/&lt;br /&gt;
sa-learn --ham ${HOME}/sa-learn-tmp/*.eml&lt;br /&gt;
rm -f ${HOME}/sa-learn-tmp/*.eml&lt;br /&gt;
rm -f ${HOME}/Maildir/.Junk.LearnHam/cur/*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Empfängerin der Nachrichten / der Empfänger füttert den Lernprozess, indem Spam-Nachrichten in den Ordner &amp;quot;Spam/LearnSpam&amp;quot; verschoben werden und indem gute Nachrichten in den Ordner &amp;quot;Spam/LearnHam&amp;quot; kopiert werden.&lt;br /&gt;
&lt;br /&gt;
Das Skript wird über einen systemd-Timer täglich ausgeführt, der pro Mailbox eingerichtet werden muss.&lt;br /&gt;
&lt;br /&gt;
= Alternative 2: Maileingangsserver mit Spamfilter nutzen =&lt;br /&gt;
&lt;br /&gt;
Diese Alternative kann von einem Domain-Administrator oder vom &amp;quot;Webmaster on Demand&amp;quot; für eine oder mehrere E-Mail-Domains eingerichtet werden. Die einzelnen Nutzer:innen können mit Hilfe des Hostsharing-Webmail einen Filter einrichten, so dass verdächtige Nachrichten in einem Spam-Ordner einsortiert werden.&lt;br /&gt;
&lt;br /&gt;
Seit einigen Jahren betreibt Hostsharing zusätzlich zu den vorkonfigurierte Maileingangsservern einen zweiten Satz von Maileingangsservern, bei denen Spamassassin bereits beim Annehmen einer E-Mail ausgeführt wird. Eingehende Nachrichten mit eindeutiger Bewertung als Spam werden bereits im SMTP-Dialog abgewiesen. Nachrichten mit einem Spam-Score über 5 Punkten werden angenommen und zugestellt. Spamassassin fügt die Bewertung für diese Nachrichten in die Header der Nachricht ein, zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
X-Spam-Flag: YES&lt;br /&gt;
X-Spam-Score: 6.263&lt;br /&gt;
X-Spam-Level: ******&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anhand dieser Zeilen kann man in Roundcube Filter einrichten, die die Nachrichten beim Eingehen der Nachricht in einen Spam-Ordner mit verdächtigen Nachrichten verschieben (siehe später folgenden Abschnitt).&lt;br /&gt;
&lt;br /&gt;
== Eingangsserver konfigurieren ==&lt;br /&gt;
&lt;br /&gt;
Die Maileingangsserver mit Spamassassin lassen sich pro Domain konfigurieren, indem die MX-Records im DNS-Zonefile gegenüber dem Default-Zonefile angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Im Zonefile entfällt der Platzhalter &amp;quot;{MX_RR}&amp;quot;. Stattdessen werden die folgenden MX-Records eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  10  smailin1.hostsharing.net.&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  10  smailin2.hostsharing.net.&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  10  smailin3.hostsharing.net.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Änderung der DNS-Zone siehe: https://www.hostsharing.net/doc/managed-operations-platform/zonefile/&lt;br /&gt;
Wer sich die Aktion auf der Shell nicht zutraut, möge bitte den &amp;quot;Webmaster on Demand&amp;quot; beauftragen.&lt;br /&gt;
&lt;br /&gt;
== Spam-Ordner ==&lt;br /&gt;
&lt;br /&gt;
Mit dem folgenden Filter können Nachrichten, die von Spamassassin markiert wurden, automatisch in einen Spam-Ordner verschoben werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:2025-02-07 Sievefilter-Spam.png|960x480px|gerahmt|links|alternativtext=Screenshot Filterregel zum Spam Aussortieren|Filter in Roundcube einrichten]]&lt;br /&gt;
&lt;br /&gt;
= Alternative 3: SecureMX zubuchen =&lt;br /&gt;
&lt;br /&gt;
Über unseren Domain-Anbieter &amp;quot;Partnergate&amp;quot; bietet Hostsharing als dritte Alternative die kommerzielle Spam-Appliance von Cisco an. Das Produkt heißt bei Partnergate &amp;quot;SecureMX&amp;quot;: https://www.hostsharing.net/loesungen/email/spam-abwehr/&lt;br /&gt;
&lt;br /&gt;
Die Nutzung von SecureMX ist kostenpflichtig und wird auf Wunsch vom Hostsharing-Service eingerichtet. &lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass bei der Nutzung von SecureMX alle eingehenden E-Mail Nachrichten über Server geleitet werden, die nicht unter der Kontrolle von Hostsharing stehen und proprietäre Software einsetzen. Dieser Sachverhalt muss vom Mitglied ggf. datenschutzrechtlich bewertet werden.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Tomcat_Installieren&amp;diff=7428</id>
		<title>Tomcat Installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Tomcat_Installieren&amp;diff=7428"/>
		<updated>2025-09-30T10:48:11Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* Start des Tomcat Servers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Apache Tomcat installieren&lt;br /&gt;
&lt;br /&gt;
== Allgemein ==&lt;br /&gt;
&lt;br /&gt;
[http://tomcat.apache.org/ Apache Tomcat] ist ein Webserver (HTTP-Server), der in der Programmiersprache Java entwickelt ist. Er dient in erster Linie dazu, dynamische Web-Anwendungen zu betreiben, die ebenfalls in Java programmiert sind. Basis-Technologien sind [http://de.wikipedia.org/wiki/Servlet Java-Servlets] und [http://de.wikipedia.org/wiki/JSP Java Server Pages (JSP)].&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von Apache Tomcat ist bei Hostsharing das Hosting von komplexen Java Web-Applikationen problemlos möglich.&lt;br /&gt;
&lt;br /&gt;
== Spezielle Installation bei Hostsharing ==&lt;br /&gt;
&lt;br /&gt;
In jedem dynamischen Webhosting-Paket der Hostsharing eG können einer (oder mehrere) Tomcat-Webserver betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Die hier beschriebene Installation benötigt bei Hostsharing die Paket-Option &amp;quot;RAM&amp;quot;. Benötigt werden min. 512 MB. Im Managed Webspace ist diese Option kostenpflichtig: https://www.hostsharing.net/angebote/managed-webspace/ gebucht werden muss der RAM auch bei einem Managed-Server. &lt;br /&gt;
&lt;br /&gt;
Diese Anleitung dokumentiert die Installation des Apache Tomcat Servers als Service-User in einem WEB-Paket bei Hostsharing.  Mit der Einrichtung der Option &amp;quot;eigener Serverdienst&amp;quot; werden für die Paket-IP-Adresse einer oder mehrere IP-Ports reserviert. An diese Ports wird der eigene Serverdienst (also der Tomcat-Server) am Localhost-Interface gebunden.&lt;br /&gt;
&lt;br /&gt;
Bei der Anmeldung (bei service(at)hostsharing.net bitte angeben:&lt;br /&gt;
&lt;br /&gt;
# den Service User, mit dessen Rechten der Tomcat-Dienst laufen soll (also zum Beispiel &amp;quot;xyz00-tomcat&amp;quot;)&lt;br /&gt;
# wieviele IP-Ports reserviert werden sollen (in der folgenden Anleitung verwenden wir drei nicht-privilegierte Ports: &lt;br /&gt;
* 38005 als &amp;quot;Shutdown&amp;quot;-Schnittstelle&lt;br /&gt;
* 38006 für eine AJP-Listener&lt;br /&gt;
&lt;br /&gt;
== Installation == &lt;br /&gt;
&lt;br /&gt;
Vorbemerkung: Mit Debian 12 (&#039;Bookworm&#039;) wird Tomcat 10 von der Distribution mitgeliefert. &lt;br /&gt;
&lt;br /&gt;
Auf den Hostsharing-Servern ist das Debian-Paket &amp;quot;tomcat10-user&amp;quot; installiert. Es stellt den &lt;br /&gt;
Apache Tomcat Server in der Version 10.1.x für den Betrieb als normaler (nicht privilegierter) User bereit.&lt;br /&gt;
Dabei wird die zentral installierte Tomcat-Software benutzt, die über Betriebssystem-Updates mit Sicherheits-Updates versorgt wird.&lt;br /&gt;
&lt;br /&gt;
Für die Installation der Konfigurations-Dateien in Heimat-Verzeichnis des Benutzers wird folgender Befehl&lt;br /&gt;
mit den Rechten des Service-Users aufgerufen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-tomcat@h00:~$ tomcat10-instance-create tomcat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ich bevorzuge das catalina.sh-Startskript zum Testen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-tomcat@h00:~$ cp /usr/share/tomcat10/bin/catalina.sh tomcat/bin/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl legt ein Verzeichnis &amp;quot;tomcat&amp;quot; mit der üblichen Dateistruktur für einen Tomcat-Server an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
bin&lt;br /&gt;
bin/catalina.sh&lt;br /&gt;
bin/setenv.sh&lt;br /&gt;
bin/shutdown.sh&lt;br /&gt;
bin/startup.sh&lt;br /&gt;
conf&lt;br /&gt;
conf/catalina.properties&lt;br /&gt;
conf/context.xml&lt;br /&gt;
conf/jaspic-providers.xml&lt;br /&gt;
conf/logging.properties&lt;br /&gt;
conf/server.xml&lt;br /&gt;
conf/tomcat-users.xml&lt;br /&gt;
conf/web.xml&lt;br /&gt;
logs&lt;br /&gt;
policy&lt;br /&gt;
policy/catalina.policy&lt;br /&gt;
temp&lt;br /&gt;
webapps&lt;br /&gt;
work&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Hauptsache muss die Konfigurationsdatei &amp;quot;server.xml&amp;quot; im Verzeichnis &amp;quot;~/tomcat/conf/&amp;quot; angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel für eine minimale &amp;quot;server.xml&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;Server port=&amp;quot;38005&amp;quot; shutdown=&amp;quot;SHUTDOWN&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;Listener className=&amp;quot;org.apache.catalina.startup.VersionLoggerListener&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;Listener className=&amp;quot;org.apache.catalina.core.AprLifecycleListener&amp;quot; SSLEngine=&amp;quot;on&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;Listener className=&amp;quot;org.apache.catalina.core.JreMemoryLeakPreventionListener&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;Listener className=&amp;quot;org.apache.catalina.mbeans.GlobalResourcesLifecycleListener&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;Listener className=&amp;quot;org.apache.catalina.core.ThreadLocalLeakPreventionListener&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;GlobalNamingResources&amp;gt;&lt;br /&gt;
    &amp;lt;Resource name=&amp;quot;UserDatabase&amp;quot; auth=&amp;quot;Container&amp;quot;&lt;br /&gt;
              type=&amp;quot;org.apache.catalina.UserDatabase&amp;quot;&lt;br /&gt;
              description=&amp;quot;User database that can be updated and saved&amp;quot;&lt;br /&gt;
              factory=&amp;quot;org.apache.catalina.users.MemoryUserDatabaseFactory&amp;quot;&lt;br /&gt;
              pathname=&amp;quot;conf/tomcat-users.xml&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/GlobalNamingResources&amp;gt;&lt;br /&gt;
  &amp;lt;Service name=&amp;quot;Catalina&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Connector protocol=&amp;quot;AJP/1.3&amp;quot; address=&amp;quot;127.0.0.1&amp;quot; port=&amp;quot;38006&amp;quot; redirectPort=&amp;quot;443&amp;quot; secretRequired=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;Engine name=&amp;quot;Catalina&amp;quot; defaultHost=&amp;quot;localhost&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Realm className=&amp;quot;org.apache.catalina.realm.LockOutRealm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;Realm className=&amp;quot;org.apache.catalina.realm.UserDatabaseRealm&amp;quot; resourceName=&amp;quot;UserDatabase&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/Realm&amp;gt;&lt;br /&gt;
      &amp;lt;Host name=&amp;quot;localhost&amp;quot;  appBase=&amp;quot;../webapps&amp;quot; unpackWARs=&amp;quot;true&amp;quot; autoDeploy=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/Host&amp;gt;&lt;br /&gt;
    &amp;lt;/Engine&amp;gt;&lt;br /&gt;
  &amp;lt;/Service&amp;gt;&lt;br /&gt;
&amp;lt;/Server&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Angepasst werden müssen:&lt;br /&gt;
* die beiden IP-Ports (im Beispiel 38005 und 38006 am Localhost-Interface)&lt;br /&gt;
&lt;br /&gt;
== Deployment einer Anwendung ==&lt;br /&gt;
&lt;br /&gt;
In der Beispiel-Konfiguration wurde das Verzeichnis &#039;&#039;$HOME/webapps/&#039;&#039; für die Anwendungen konfiguriert. Wir legen dieses Verzeichnis an und kopieren eine minimale Anwendung hinein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/webapps/hello/WEB-INF/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dort legen wir die Datei ~/webapps/hello/WEB-INF/web.xml mit folgendem Inhalt an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;web-app &lt;br /&gt;
	xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
	xmlns=&amp;quot;http://java.sun.com/xml/ns/javaee&amp;quot;&lt;br /&gt;
	xmlns:web=&amp;quot;http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd&amp;quot;&lt;br /&gt;
	xsi:schemaLocation=&amp;quot;http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd&amp;quot; &lt;br /&gt;
	id=&amp;quot;WebApp_ID&amp;quot; version=&amp;quot;3.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/web-app&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dazu eine einfache JSP-Datei ~/webapps/hello/index.jsp:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;%@ page language=&amp;quot;java&amp;quot; contentType=&amp;quot;text/html; charset=UTF-8&amp;quot; pageEncoding=&amp;quot;UTF-8&amp;quot;%&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;de-de&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Hallo Welt&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Java Version: &amp;lt;%= System.getProperty(&amp;quot;java.version&amp;quot;)  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun können wir die HTTP-Requests, die an eine Domain im Paket gesendet werden, an den Tomcat weiterleiten.&lt;br /&gt;
Das funktioniert über eine &#039;&#039;.htaccess&#039;&#039;-Datei, zum Beispiel im Verzeichnis &#039;&#039;~/doms/hs-example.de/htdocs-ssl&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot; line&amp;gt;&lt;br /&gt;
DirectoryIndex disabled&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteBase /&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
RewriteRule ^(.*) ajp://127.0.0.1:38006/$1 [proxy,last]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung der IP-Port 38006 muss hier wieder angepasst werden!&lt;br /&gt;
&lt;br /&gt;
Dadurch ist die Mini-Anwendung unter der URL &amp;quot;https://hs-example.de/hello/&amp;quot; erreichbar.&lt;br /&gt;
&lt;br /&gt;
== Start des Tomcat Servers ==&lt;br /&gt;
&lt;br /&gt;
Der Tomcat kann über die Skripte in &amp;quot;~/tomcat/bin/&amp;quot; gestartet und gestoppt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/tomcat&lt;br /&gt;
./bin/startup.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Log-Ausgaben des Servers sind in &amp;quot;~/tomcat/logs/catalina.out&amp;quot; zu finden.&lt;br /&gt;
&lt;br /&gt;
Damit der Tomcat bei einem Reboot der Hostsharing-Server automatisch gestartet wird,&lt;br /&gt;
konfigurieren wir den Prozessmonitor &#039;&#039;systemd&#039;&#039; entsprechend.&lt;br /&gt;
&lt;br /&gt;
Wir legen ein Verzeichnis für die Konfiguration des &#039;&#039;systemd&#039;&#039; an und legen eine Unit-Konfiguration für einen Service dort ab:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p ~/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Unit-Datei &#039;&#039;~/.config/systemd/user/tomcat.service&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Tomcat User Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
WorkingDirectory=%h/tomcat&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
Environment=&amp;quot;JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64&amp;quot;&lt;br /&gt;
Environment=&amp;quot;JAVA_OPTS=-Xms256M -Xmx512M&amp;quot;&lt;br /&gt;
Environment=&amp;quot;UMASK=0022&amp;quot;&lt;br /&gt;
ExecStart=%h/tomcat/bin/catalina.sh run&lt;br /&gt;
StandardOutput=append:%h/tomcat/logs/catalina.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
NoNewPrivileges=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann &#039;&#039;SystemD&#039;&#039; RAM- und CPU-Ressourcen begrenzen. Dazu wird der Abschnitt &#039;&#039;Service&#039;&#039; ergänzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die letzte Aufgabe ist das Einrichten der Bereinigung für die Log-Dateien.&lt;br /&gt;
&lt;br /&gt;
Dazu lege ich die Konfigurationsdatei &#039;&#039;.logrotate&#039;&#039; im $HOME-Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
/home/pacs/xyz00/users/tomcat/tomcat/logs/catalina.log {&lt;br /&gt;
   copytruncate&lt;br /&gt;
   compress&lt;br /&gt;
   rotate 5&lt;br /&gt;
   daily&lt;br /&gt;
   missingok&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die Bereinigung der Log-Dateien noch zwei systemd-Timer:&lt;br /&gt;
&lt;br /&gt;
~/.config/systemd/user/logrotate.service&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=rotate tomcat logs&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/sbin/logrotate -s %h/.logrotate.state %h/.logrotate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
~/.config/systemd/user/logrotate.timer&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=rotate tomcat logs&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=1:1&lt;br /&gt;
Persistent=True&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
~/.config/systemd/user/delete_old_logs.service&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=delete old log files&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/bin/find %h/tomcat/logs -type f -mmin +10080 -delete&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
~/.config/systemd/user/delete_old_logs.timer&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=delete old log files&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=14:3&lt;br /&gt;
Persistent=True&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Timer aktivieren und starten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
$ systemctl --user enable logrotate.timer&lt;br /&gt;
$ systemctl --user start logrotate.timer&lt;br /&gt;
$ systemctl --user enable delete_old_logs.timer&lt;br /&gt;
$ systemctl --user start delete_old_logs.timer&lt;br /&gt;
$ systemctl --user list-timers --all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann gehen wir daran unsere Anwendungen im Tomcat zu deployen.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
*[http://tomcat.apache.org/ Apache Tomcat Homepage (Englisch)]&lt;br /&gt;
*[http://tomcat.apache.org/tomcat-9.0-doc/index.html Apache Tomcat Dokumentation (Version 9.0, Englisch)]&lt;br /&gt;
*[http://wiki.apache.org/tomcat/FrontPage Apache Tomcat Wiki (Englisch)]&lt;br /&gt;
*[https://github.com/tpokorra/Hostsharing-Ansible-Tomcat Ansible Playbook für Hostsharing]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Ansible Playbook]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Eigene Daemons]]&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Tomcat_Installieren&amp;diff=7427</id>
		<title>Tomcat Installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Tomcat_Installieren&amp;diff=7427"/>
		<updated>2025-09-30T10:42:34Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* Start des Tomcat Servers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Apache Tomcat installieren&lt;br /&gt;
&lt;br /&gt;
== Allgemein ==&lt;br /&gt;
&lt;br /&gt;
[http://tomcat.apache.org/ Apache Tomcat] ist ein Webserver (HTTP-Server), der in der Programmiersprache Java entwickelt ist. Er dient in erster Linie dazu, dynamische Web-Anwendungen zu betreiben, die ebenfalls in Java programmiert sind. Basis-Technologien sind [http://de.wikipedia.org/wiki/Servlet Java-Servlets] und [http://de.wikipedia.org/wiki/JSP Java Server Pages (JSP)].&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von Apache Tomcat ist bei Hostsharing das Hosting von komplexen Java Web-Applikationen problemlos möglich.&lt;br /&gt;
&lt;br /&gt;
== Spezielle Installation bei Hostsharing ==&lt;br /&gt;
&lt;br /&gt;
In jedem dynamischen Webhosting-Paket der Hostsharing eG können einer (oder mehrere) Tomcat-Webserver betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Die hier beschriebene Installation benötigt bei Hostsharing die Paket-Option &amp;quot;RAM&amp;quot;. Benötigt werden min. 512 MB. Im Managed Webspace ist diese Option kostenpflichtig: https://www.hostsharing.net/angebote/managed-webspace/ gebucht werden muss der RAM auch bei einem Managed-Server. &lt;br /&gt;
&lt;br /&gt;
Diese Anleitung dokumentiert die Installation des Apache Tomcat Servers als Service-User in einem WEB-Paket bei Hostsharing.  Mit der Einrichtung der Option &amp;quot;eigener Serverdienst&amp;quot; werden für die Paket-IP-Adresse einer oder mehrere IP-Ports reserviert. An diese Ports wird der eigene Serverdienst (also der Tomcat-Server) am Localhost-Interface gebunden.&lt;br /&gt;
&lt;br /&gt;
Bei der Anmeldung (bei service(at)hostsharing.net bitte angeben:&lt;br /&gt;
&lt;br /&gt;
# den Service User, mit dessen Rechten der Tomcat-Dienst laufen soll (also zum Beispiel &amp;quot;xyz00-tomcat&amp;quot;)&lt;br /&gt;
# wieviele IP-Ports reserviert werden sollen (in der folgenden Anleitung verwenden wir drei nicht-privilegierte Ports: &lt;br /&gt;
* 38005 als &amp;quot;Shutdown&amp;quot;-Schnittstelle&lt;br /&gt;
* 38006 für eine AJP-Listener&lt;br /&gt;
&lt;br /&gt;
== Installation == &lt;br /&gt;
&lt;br /&gt;
Vorbemerkung: Mit Debian 12 (&#039;Bookworm&#039;) wird Tomcat 10 von der Distribution mitgeliefert. &lt;br /&gt;
&lt;br /&gt;
Auf den Hostsharing-Servern ist das Debian-Paket &amp;quot;tomcat10-user&amp;quot; installiert. Es stellt den &lt;br /&gt;
Apache Tomcat Server in der Version 10.1.x für den Betrieb als normaler (nicht privilegierter) User bereit.&lt;br /&gt;
Dabei wird die zentral installierte Tomcat-Software benutzt, die über Betriebssystem-Updates mit Sicherheits-Updates versorgt wird.&lt;br /&gt;
&lt;br /&gt;
Für die Installation der Konfigurations-Dateien in Heimat-Verzeichnis des Benutzers wird folgender Befehl&lt;br /&gt;
mit den Rechten des Service-Users aufgerufen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-tomcat@h00:~$ tomcat10-instance-create tomcat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ich bevorzuge das catalina.sh-Startskript zum Testen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-tomcat@h00:~$ cp /usr/share/tomcat10/bin/catalina.sh tomcat/bin/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl legt ein Verzeichnis &amp;quot;tomcat&amp;quot; mit der üblichen Dateistruktur für einen Tomcat-Server an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
bin&lt;br /&gt;
bin/catalina.sh&lt;br /&gt;
bin/setenv.sh&lt;br /&gt;
bin/shutdown.sh&lt;br /&gt;
bin/startup.sh&lt;br /&gt;
conf&lt;br /&gt;
conf/catalina.properties&lt;br /&gt;
conf/context.xml&lt;br /&gt;
conf/jaspic-providers.xml&lt;br /&gt;
conf/logging.properties&lt;br /&gt;
conf/server.xml&lt;br /&gt;
conf/tomcat-users.xml&lt;br /&gt;
conf/web.xml&lt;br /&gt;
logs&lt;br /&gt;
policy&lt;br /&gt;
policy/catalina.policy&lt;br /&gt;
temp&lt;br /&gt;
webapps&lt;br /&gt;
work&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Hauptsache muss die Konfigurationsdatei &amp;quot;server.xml&amp;quot; im Verzeichnis &amp;quot;~/tomcat/conf/&amp;quot; angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel für eine minimale &amp;quot;server.xml&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;Server port=&amp;quot;38005&amp;quot; shutdown=&amp;quot;SHUTDOWN&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;Listener className=&amp;quot;org.apache.catalina.startup.VersionLoggerListener&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;Listener className=&amp;quot;org.apache.catalina.core.AprLifecycleListener&amp;quot; SSLEngine=&amp;quot;on&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;Listener className=&amp;quot;org.apache.catalina.core.JreMemoryLeakPreventionListener&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;Listener className=&amp;quot;org.apache.catalina.mbeans.GlobalResourcesLifecycleListener&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;Listener className=&amp;quot;org.apache.catalina.core.ThreadLocalLeakPreventionListener&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;GlobalNamingResources&amp;gt;&lt;br /&gt;
    &amp;lt;Resource name=&amp;quot;UserDatabase&amp;quot; auth=&amp;quot;Container&amp;quot;&lt;br /&gt;
              type=&amp;quot;org.apache.catalina.UserDatabase&amp;quot;&lt;br /&gt;
              description=&amp;quot;User database that can be updated and saved&amp;quot;&lt;br /&gt;
              factory=&amp;quot;org.apache.catalina.users.MemoryUserDatabaseFactory&amp;quot;&lt;br /&gt;
              pathname=&amp;quot;conf/tomcat-users.xml&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/GlobalNamingResources&amp;gt;&lt;br /&gt;
  &amp;lt;Service name=&amp;quot;Catalina&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Connector protocol=&amp;quot;AJP/1.3&amp;quot; address=&amp;quot;127.0.0.1&amp;quot; port=&amp;quot;38006&amp;quot; redirectPort=&amp;quot;443&amp;quot; secretRequired=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;Engine name=&amp;quot;Catalina&amp;quot; defaultHost=&amp;quot;localhost&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Realm className=&amp;quot;org.apache.catalina.realm.LockOutRealm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;Realm className=&amp;quot;org.apache.catalina.realm.UserDatabaseRealm&amp;quot; resourceName=&amp;quot;UserDatabase&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/Realm&amp;gt;&lt;br /&gt;
      &amp;lt;Host name=&amp;quot;localhost&amp;quot;  appBase=&amp;quot;../webapps&amp;quot; unpackWARs=&amp;quot;true&amp;quot; autoDeploy=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/Host&amp;gt;&lt;br /&gt;
    &amp;lt;/Engine&amp;gt;&lt;br /&gt;
  &amp;lt;/Service&amp;gt;&lt;br /&gt;
&amp;lt;/Server&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Angepasst werden müssen:&lt;br /&gt;
* die beiden IP-Ports (im Beispiel 38005 und 38006 am Localhost-Interface)&lt;br /&gt;
&lt;br /&gt;
== Deployment einer Anwendung ==&lt;br /&gt;
&lt;br /&gt;
In der Beispiel-Konfiguration wurde das Verzeichnis &#039;&#039;$HOME/webapps/&#039;&#039; für die Anwendungen konfiguriert. Wir legen dieses Verzeichnis an und kopieren eine minimale Anwendung hinein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/webapps/hello/WEB-INF/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dort legen wir die Datei ~/webapps/hello/WEB-INF/web.xml mit folgendem Inhalt an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;web-app &lt;br /&gt;
	xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
	xmlns=&amp;quot;http://java.sun.com/xml/ns/javaee&amp;quot;&lt;br /&gt;
	xmlns:web=&amp;quot;http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd&amp;quot;&lt;br /&gt;
	xsi:schemaLocation=&amp;quot;http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd&amp;quot; &lt;br /&gt;
	id=&amp;quot;WebApp_ID&amp;quot; version=&amp;quot;3.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/web-app&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dazu eine einfache JSP-Datei ~/webapps/hello/index.jsp:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;%@ page language=&amp;quot;java&amp;quot; contentType=&amp;quot;text/html; charset=UTF-8&amp;quot; pageEncoding=&amp;quot;UTF-8&amp;quot;%&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;de-de&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Hallo Welt&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Java Version: &amp;lt;%= System.getProperty(&amp;quot;java.version&amp;quot;)  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun können wir die HTTP-Requests, die an eine Domain im Paket gesendet werden, an den Tomcat weiterleiten.&lt;br /&gt;
Das funktioniert über eine &#039;&#039;.htaccess&#039;&#039;-Datei, zum Beispiel im Verzeichnis &#039;&#039;~/doms/hs-example.de/htdocs-ssl&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot; line&amp;gt;&lt;br /&gt;
DirectoryIndex disabled&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteBase /&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
RewriteRule ^(.*) ajp://127.0.0.1:38006/$1 [proxy,last]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung der IP-Port 38006 muss hier wieder angepasst werden!&lt;br /&gt;
&lt;br /&gt;
Dadurch ist die Mini-Anwendung unter der URL &amp;quot;https://hs-example.de/hello/&amp;quot; erreichbar.&lt;br /&gt;
&lt;br /&gt;
== Start des Tomcat Servers ==&lt;br /&gt;
&lt;br /&gt;
Der Tomcat kann über die Skripte in &amp;quot;~/tomcat/bin/&amp;quot; gestartet und gestoppt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/tomcat&lt;br /&gt;
./bin/startup.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Log-Ausgaben des Servers sind in &amp;quot;~/tomcat/logs/catalina.out&amp;quot; zu finden.&lt;br /&gt;
&lt;br /&gt;
Damit der Tomcat bei einem Reboot der Hostsharing-Server automatisch gestartet wird,&lt;br /&gt;
konfigurieren wir den Prozessmonitor &#039;&#039;systemd&#039;&#039; entsprechend.&lt;br /&gt;
&lt;br /&gt;
Wir legen ein Verzeichnis für die Konfiguration des &#039;&#039;systemd&#039;&#039; an und legen eine Unit-Konfiguration für einen Service dort ab:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p ~/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Unit-Datei &#039;&#039;~/.config/systemd/user/tomcat.service&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Tomcat User Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
WorkingDirectory=%h/tomcat&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
Environment=&amp;quot;JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64&amp;quot;&lt;br /&gt;
Environment=&amp;quot;JAVA_OPTS=-Xms256M -Xmx512M&amp;quot;&lt;br /&gt;
Environment=&amp;quot;UMASK=0022&amp;quot;&lt;br /&gt;
ExecStart=%h/tomcat/bin/catalina.sh run&lt;br /&gt;
StandardOutput=append:%h/tomcat/logs/catalina.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
NoNewPrivileges=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann &#039;&#039;SystemD&#039;&#039; RAM- und CPU-Ressourcen begrenzen. Dazu wird der Abschnitt &#039;&#039;Service&#039;&#039; ergänzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die letzte Aufgabe ist das Einrichten der Bereinigung für die Log-Dateien.&lt;br /&gt;
&lt;br /&gt;
Dazu lege ich die Konfigurationsdatei &#039;&#039;.logrotate&#039;&#039; im $HOME-Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
/home/pacs/xyz00/users/tomcat/tomcat/logs/catalina.log {&lt;br /&gt;
   copytruncate&lt;br /&gt;
   compress&lt;br /&gt;
   rotate 5&lt;br /&gt;
   daily&lt;br /&gt;
   missingok&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die Bereinigung der Log-Dateien noch zwei systemd-Timer:&lt;br /&gt;
&lt;br /&gt;
~/.config/systemd/user/logrotate.service&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=rotate tomcat logs&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/sbin/logrotate -s %h/.logrotate.state %h/.logrotate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
~/.config/systemd/user/logrotate.timer&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=rotate tomcat logs&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=1:1&lt;br /&gt;
Persistent=True&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
~/.config/systemd/user/delete_old_logs.service&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=delete old log files&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/bin/find %h/tomcat/logs -type f -mmin +10080 -delete&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
~/.config/systemd/user/delete_old_logs.timer&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=delete old log files&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=14:3&lt;br /&gt;
Persistent=True&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Timer aktivieren und starten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
$ systemctl --user enable logrotate.timer&lt;br /&gt;
$ systemctl --user start logrotate.timer&lt;br /&gt;
$ systemctl --user enable delete_old_logs.timer&lt;br /&gt;
$ systemctl --user start delete_old_logs.timer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann gehen wir daran unsere Anwendungen im Tomcat zu deployen.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
*[http://tomcat.apache.org/ Apache Tomcat Homepage (Englisch)]&lt;br /&gt;
*[http://tomcat.apache.org/tomcat-9.0-doc/index.html Apache Tomcat Dokumentation (Version 9.0, Englisch)]&lt;br /&gt;
*[http://wiki.apache.org/tomcat/FrontPage Apache Tomcat Wiki (Englisch)]&lt;br /&gt;
*[https://github.com/tpokorra/Hostsharing-Ansible-Tomcat Ansible Playbook für Hostsharing]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Ansible Playbook]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Eigene Daemons]]&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Tomcat_Installieren&amp;diff=7426</id>
		<title>Tomcat Installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Tomcat_Installieren&amp;diff=7426"/>
		<updated>2025-09-30T10:35:48Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* Start des Tomcat Servers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Apache Tomcat installieren&lt;br /&gt;
&lt;br /&gt;
== Allgemein ==&lt;br /&gt;
&lt;br /&gt;
[http://tomcat.apache.org/ Apache Tomcat] ist ein Webserver (HTTP-Server), der in der Programmiersprache Java entwickelt ist. Er dient in erster Linie dazu, dynamische Web-Anwendungen zu betreiben, die ebenfalls in Java programmiert sind. Basis-Technologien sind [http://de.wikipedia.org/wiki/Servlet Java-Servlets] und [http://de.wikipedia.org/wiki/JSP Java Server Pages (JSP)].&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von Apache Tomcat ist bei Hostsharing das Hosting von komplexen Java Web-Applikationen problemlos möglich.&lt;br /&gt;
&lt;br /&gt;
== Spezielle Installation bei Hostsharing ==&lt;br /&gt;
&lt;br /&gt;
In jedem dynamischen Webhosting-Paket der Hostsharing eG können einer (oder mehrere) Tomcat-Webserver betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Die hier beschriebene Installation benötigt bei Hostsharing die Paket-Option &amp;quot;RAM&amp;quot;. Benötigt werden min. 512 MB. Im Managed Webspace ist diese Option kostenpflichtig: https://www.hostsharing.net/angebote/managed-webspace/ gebucht werden muss der RAM auch bei einem Managed-Server. &lt;br /&gt;
&lt;br /&gt;
Diese Anleitung dokumentiert die Installation des Apache Tomcat Servers als Service-User in einem WEB-Paket bei Hostsharing.  Mit der Einrichtung der Option &amp;quot;eigener Serverdienst&amp;quot; werden für die Paket-IP-Adresse einer oder mehrere IP-Ports reserviert. An diese Ports wird der eigene Serverdienst (also der Tomcat-Server) am Localhost-Interface gebunden.&lt;br /&gt;
&lt;br /&gt;
Bei der Anmeldung (bei service(at)hostsharing.net bitte angeben:&lt;br /&gt;
&lt;br /&gt;
# den Service User, mit dessen Rechten der Tomcat-Dienst laufen soll (also zum Beispiel &amp;quot;xyz00-tomcat&amp;quot;)&lt;br /&gt;
# wieviele IP-Ports reserviert werden sollen (in der folgenden Anleitung verwenden wir drei nicht-privilegierte Ports: &lt;br /&gt;
* 38005 als &amp;quot;Shutdown&amp;quot;-Schnittstelle&lt;br /&gt;
* 38006 für eine AJP-Listener&lt;br /&gt;
&lt;br /&gt;
== Installation == &lt;br /&gt;
&lt;br /&gt;
Vorbemerkung: Mit Debian 12 (&#039;Bookworm&#039;) wird Tomcat 10 von der Distribution mitgeliefert. &lt;br /&gt;
&lt;br /&gt;
Auf den Hostsharing-Servern ist das Debian-Paket &amp;quot;tomcat10-user&amp;quot; installiert. Es stellt den &lt;br /&gt;
Apache Tomcat Server in der Version 10.1.x für den Betrieb als normaler (nicht privilegierter) User bereit.&lt;br /&gt;
Dabei wird die zentral installierte Tomcat-Software benutzt, die über Betriebssystem-Updates mit Sicherheits-Updates versorgt wird.&lt;br /&gt;
&lt;br /&gt;
Für die Installation der Konfigurations-Dateien in Heimat-Verzeichnis des Benutzers wird folgender Befehl&lt;br /&gt;
mit den Rechten des Service-Users aufgerufen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-tomcat@h00:~$ tomcat10-instance-create tomcat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ich bevorzuge das catalina.sh-Startskript zum Testen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-tomcat@h00:~$ cp /usr/share/tomcat10/bin/catalina.sh tomcat/bin/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl legt ein Verzeichnis &amp;quot;tomcat&amp;quot; mit der üblichen Dateistruktur für einen Tomcat-Server an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
bin&lt;br /&gt;
bin/catalina.sh&lt;br /&gt;
bin/setenv.sh&lt;br /&gt;
bin/shutdown.sh&lt;br /&gt;
bin/startup.sh&lt;br /&gt;
conf&lt;br /&gt;
conf/catalina.properties&lt;br /&gt;
conf/context.xml&lt;br /&gt;
conf/jaspic-providers.xml&lt;br /&gt;
conf/logging.properties&lt;br /&gt;
conf/server.xml&lt;br /&gt;
conf/tomcat-users.xml&lt;br /&gt;
conf/web.xml&lt;br /&gt;
logs&lt;br /&gt;
policy&lt;br /&gt;
policy/catalina.policy&lt;br /&gt;
temp&lt;br /&gt;
webapps&lt;br /&gt;
work&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Hauptsache muss die Konfigurationsdatei &amp;quot;server.xml&amp;quot; im Verzeichnis &amp;quot;~/tomcat/conf/&amp;quot; angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel für eine minimale &amp;quot;server.xml&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;Server port=&amp;quot;38005&amp;quot; shutdown=&amp;quot;SHUTDOWN&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;Listener className=&amp;quot;org.apache.catalina.startup.VersionLoggerListener&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;Listener className=&amp;quot;org.apache.catalina.core.AprLifecycleListener&amp;quot; SSLEngine=&amp;quot;on&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;Listener className=&amp;quot;org.apache.catalina.core.JreMemoryLeakPreventionListener&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;Listener className=&amp;quot;org.apache.catalina.mbeans.GlobalResourcesLifecycleListener&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;Listener className=&amp;quot;org.apache.catalina.core.ThreadLocalLeakPreventionListener&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;GlobalNamingResources&amp;gt;&lt;br /&gt;
    &amp;lt;Resource name=&amp;quot;UserDatabase&amp;quot; auth=&amp;quot;Container&amp;quot;&lt;br /&gt;
              type=&amp;quot;org.apache.catalina.UserDatabase&amp;quot;&lt;br /&gt;
              description=&amp;quot;User database that can be updated and saved&amp;quot;&lt;br /&gt;
              factory=&amp;quot;org.apache.catalina.users.MemoryUserDatabaseFactory&amp;quot;&lt;br /&gt;
              pathname=&amp;quot;conf/tomcat-users.xml&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/GlobalNamingResources&amp;gt;&lt;br /&gt;
  &amp;lt;Service name=&amp;quot;Catalina&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Connector protocol=&amp;quot;AJP/1.3&amp;quot; address=&amp;quot;127.0.0.1&amp;quot; port=&amp;quot;38006&amp;quot; redirectPort=&amp;quot;443&amp;quot; secretRequired=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;Engine name=&amp;quot;Catalina&amp;quot; defaultHost=&amp;quot;localhost&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Realm className=&amp;quot;org.apache.catalina.realm.LockOutRealm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;Realm className=&amp;quot;org.apache.catalina.realm.UserDatabaseRealm&amp;quot; resourceName=&amp;quot;UserDatabase&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/Realm&amp;gt;&lt;br /&gt;
      &amp;lt;Host name=&amp;quot;localhost&amp;quot;  appBase=&amp;quot;../webapps&amp;quot; unpackWARs=&amp;quot;true&amp;quot; autoDeploy=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/Host&amp;gt;&lt;br /&gt;
    &amp;lt;/Engine&amp;gt;&lt;br /&gt;
  &amp;lt;/Service&amp;gt;&lt;br /&gt;
&amp;lt;/Server&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Angepasst werden müssen:&lt;br /&gt;
* die beiden IP-Ports (im Beispiel 38005 und 38006 am Localhost-Interface)&lt;br /&gt;
&lt;br /&gt;
== Deployment einer Anwendung ==&lt;br /&gt;
&lt;br /&gt;
In der Beispiel-Konfiguration wurde das Verzeichnis &#039;&#039;$HOME/webapps/&#039;&#039; für die Anwendungen konfiguriert. Wir legen dieses Verzeichnis an und kopieren eine minimale Anwendung hinein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/webapps/hello/WEB-INF/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dort legen wir die Datei ~/webapps/hello/WEB-INF/web.xml mit folgendem Inhalt an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;web-app &lt;br /&gt;
	xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
	xmlns=&amp;quot;http://java.sun.com/xml/ns/javaee&amp;quot;&lt;br /&gt;
	xmlns:web=&amp;quot;http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd&amp;quot;&lt;br /&gt;
	xsi:schemaLocation=&amp;quot;http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd&amp;quot; &lt;br /&gt;
	id=&amp;quot;WebApp_ID&amp;quot; version=&amp;quot;3.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/web-app&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dazu eine einfache JSP-Datei ~/webapps/hello/index.jsp:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;%@ page language=&amp;quot;java&amp;quot; contentType=&amp;quot;text/html; charset=UTF-8&amp;quot; pageEncoding=&amp;quot;UTF-8&amp;quot;%&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;de-de&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Hallo Welt&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Java Version: &amp;lt;%= System.getProperty(&amp;quot;java.version&amp;quot;)  %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun können wir die HTTP-Requests, die an eine Domain im Paket gesendet werden, an den Tomcat weiterleiten.&lt;br /&gt;
Das funktioniert über eine &#039;&#039;.htaccess&#039;&#039;-Datei, zum Beispiel im Verzeichnis &#039;&#039;~/doms/hs-example.de/htdocs-ssl&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot; line&amp;gt;&lt;br /&gt;
DirectoryIndex disabled&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteBase /&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
RewriteRule ^(.*) ajp://127.0.0.1:38006/$1 [proxy,last]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung der IP-Port 38006 muss hier wieder angepasst werden!&lt;br /&gt;
&lt;br /&gt;
Dadurch ist die Mini-Anwendung unter der URL &amp;quot;https://hs-example.de/hello/&amp;quot; erreichbar.&lt;br /&gt;
&lt;br /&gt;
== Start des Tomcat Servers ==&lt;br /&gt;
&lt;br /&gt;
Der Tomcat kann über die Skripte in &amp;quot;~/tomcat/bin/&amp;quot; gestartet und gestoppt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/tomcat&lt;br /&gt;
./bin/startup.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Log-Ausgaben des Servers sind in &amp;quot;~/tomcat/logs/catalina.out&amp;quot; zu finden.&lt;br /&gt;
&lt;br /&gt;
Damit der Tomcat bei einem Reboot der Hostsharing-Server automatisch gestartet wird,&lt;br /&gt;
konfigurieren wir den Prozessmonitor &#039;&#039;systemd&#039;&#039; entsprechend.&lt;br /&gt;
&lt;br /&gt;
Wir legen ein Verzeichnis für die Konfiguration des &#039;&#039;systemd&#039;&#039; an und legen eine Unit-Konfiguration für einen Service dort ab:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p ~/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Unit-Datei &#039;&#039;~/.config/systemd/user/tomcat.service&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Tomcat User Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
WorkingDirectory=%h/tomcat&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
Environment=&amp;quot;JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64&amp;quot;&lt;br /&gt;
Environment=&amp;quot;JAVA_OPTS=-Xms256M -Xmx512M&amp;quot;&lt;br /&gt;
Environment=&amp;quot;UMASK=0022&amp;quot;&lt;br /&gt;
ExecStart=%h/tomcat/bin/catalina.sh run&lt;br /&gt;
StandardOutput=append:%h/tomcat/logs/catalina.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
NoNewPrivileges=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann &#039;&#039;SystemD&#039;&#039; RAM- und CPU-Ressourcen begrenzen. Dazu wird der Abschnitt &#039;&#039;Service&#039;&#039; ergänzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die letzte Aufgabe ist das Einrichten der Bereinigung für die Log-Dateien.&lt;br /&gt;
&lt;br /&gt;
Dazu lege ich die Konfigurationsdatei &#039;&#039;.logrotate&#039;&#039; im $HOME-Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
/home/pacs/xyz00/users/tomcat/tomcat/logs/catalina.log {&lt;br /&gt;
   copytruncate&lt;br /&gt;
   compress&lt;br /&gt;
   rotate 5&lt;br /&gt;
   daily&lt;br /&gt;
   missingok&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die Bereinigung der Log-Dateien noch zwei systemd-Timer:&lt;br /&gt;
&lt;br /&gt;
~/.config/systemd/user/logrotate.service&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=rotate tomcat logs&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/sbin/logrotate -s /home/pacs/xyz00/users/tomcat/.logrotate.state /home/pacs/xyz00/users/tomcat/.logrotate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
~/.config/systemd/user/logrotate.timer&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=rotate tomcat logs&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=1:1&lt;br /&gt;
Persistent=True&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
~/.config/systemd/user/delete_old_logs.service&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=delete old log files&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/bin/find /home/pacs/xyz00/users/tomcat/tomcat/logs -type f -mmin +10080 -delete&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
~/.config/systemd/user/delete_old_logs.timer&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=delete old log files&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=14:3&lt;br /&gt;
Persistent=True&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Timer aktivieren und starten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
$ systemctl --user enable logrotate.timer&lt;br /&gt;
$ systemctl --user start logrotate.timer&lt;br /&gt;
$ systemctl --user enable delete_old_logs.timer&lt;br /&gt;
$ systemctl --user start delete_old_logs.timer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann gehen wir daran unsere Anwendungen im Tomcat zu deployen.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
*[http://tomcat.apache.org/ Apache Tomcat Homepage (Englisch)]&lt;br /&gt;
*[http://tomcat.apache.org/tomcat-9.0-doc/index.html Apache Tomcat Dokumentation (Version 9.0, Englisch)]&lt;br /&gt;
*[http://wiki.apache.org/tomcat/FrontPage Apache Tomcat Wiki (Englisch)]&lt;br /&gt;
*[https://github.com/tpokorra/Hostsharing-Ansible-Tomcat Ansible Playbook für Hostsharing]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Ansible Playbook]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Eigene Daemons]]&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=RechteSchleuse&amp;diff=7360</id>
		<title>RechteSchleuse</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=RechteSchleuse&amp;diff=7360"/>
		<updated>2025-05-21T16:46:21Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: kein Lesen-für-alle am $HOME&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Rechte-Schleuse =&lt;br /&gt;
&lt;br /&gt;
Die Domains liegen bei Hostsharing in einem Unterverzeichnis ~/doms der einzelnen User.&lt;br /&gt;
Damit der Apache-Webserver die Dateien erreichen kann und die Dateien andererseits nicht allgemein&lt;br /&gt;
zugänglich sind, gibt es die sog. &amp;quot;Rechte-Schleuse&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Die Rechte müssen wie folgt gesetzt sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=output&amp;gt;&lt;br /&gt;
xyz00-abc@h03:~$ ls -ld . doms/ doms/example.com/ doms/example.com/*&lt;br /&gt;
drwxr-x---  5 xyz00-abc httpd  76 Oct 13  2010 .&lt;br /&gt;
dr-xr-x--T  5 httpd     xyz00  47 Feb 22  2011 doms/&lt;br /&gt;
drwxr-x--- 12 xyz00-abc httpd 138 Feb 22  2011 doms/example.com/&lt;br /&gt;
drwxr-xr-x  2 xyz00-abc xyz00  21 Feb 22  2011 doms/example.com/cgi&lt;br /&gt;
drwxr-xr-x  2 xyz00-abc xyz00  21 Feb 22  2011 doms/example.com/cgi-ssl&lt;br /&gt;
drwxr-xr-x  2 xyz00-abc xyz00   6 Feb 22  2011 doms/example.com/etc&lt;br /&gt;
drwxr-xr-x  2 xyz00-abc xyz00  20 Feb 22  2011 doms/example.com/fastcgi&lt;br /&gt;
drwxr-xr-x  2 xyz00-abc xyz00  20 Feb 22  2011 doms/example.com/fastcgi-ssl&lt;br /&gt;
drwxr-xr-x  2 xyz00-abc xyz00  22 Feb 22  2011 doms/example.com/htdocs&lt;br /&gt;
drwxr-xr-x  2 xyz00-abc xyz00  22 Feb 22  2011 doms/example.com/htdocs-ssl&lt;br /&gt;
drwxr-xr-x  3 xyz00-abc xyz00  16 Feb 22  2011 doms/example.com/subs&lt;br /&gt;
drwxr-xr-x  3 xyz00-abc xyz00  16 Feb 22  2011 doms/example.com/subs/www&lt;br /&gt;
drwxr-xr-x  3 xyz00-abc xyz00  16 Feb 22  2011 doms/example.com/subs-ssl&lt;br /&gt;
drwxr-xr-x  3 xyz00-abc xyz00  16 Feb 22  2011 doms/example.com/subs-ssl/www&lt;br /&gt;
drwxr-xr-x  2 xyz00-abc xyz00   6 Feb 22  2011 doms/example.com/var&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Monit_installieren&amp;diff=7278</id>
		<title>Monit installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Monit_installieren&amp;diff=7278"/>
		<updated>2025-02-14T13:46:24Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: Starte Monit im init-mode, nicht im daemon-mode&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Über Monit ==&lt;br /&gt;
&lt;br /&gt;
Monit ist ein ressourcensparendes Programm zur Überwachung eines Server oder von [[Daemon|Diensten (&amp;quot;Daemons&amp;quot;)]] auf einem Server. &lt;br /&gt;
&lt;br /&gt;
Es fragt regelmäßig den Zustand des zu überwachenden Prozesses ab und kann bei einem Absturz den Prozess selbstständig neu starten. Für Betriebssystem-Ressourcen, wie Festplatten-Kapazität oder CPU- und RAM-Auslastung, können Schwellwerte angegeben werden, bei deren Überschreitung Monit per E-Mail alarmiert und in eine Log-Datei protokolliert.&lt;br /&gt;
&lt;br /&gt;
In dieser Beschreibung wird der Start des Servers und von Monit durch den Paketadmin angenommen. Sollte ein davon verschiedener Domain-Admin der &amp;quot;Befehlshaber&amp;quot; sein, so müssen die Pfade entsprechend korrigiert werden. Von &amp;quot;/home/pacs/xyz00&amp;quot; zu &amp;quot;/home/pacs/xyz00/users/user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|rot|Besser systemd benutzen|Achtung: wir empfehlen nicht mehr den Einsatz von monit als Prozessmanager. Alle Anwendungen sollten mit [[Prozessmanagement mit systemd im Userspace|Systemd im Userspace]] gestartet werden. Monit kann weiterhin zur Überwachung des Servers eingesetzt werden.}}&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Monit sucht seine Konfiguration beim Start zuerst in der Datei ~/.monitrc im Homeverzeichnis des Users, der monit startet.&lt;br /&gt;
&lt;br /&gt;
Wir erstellen also diese Datei im Hauptverzeichnis des Users und sorgen dafür, dass sie nur von diesem gelesen und beschrieben werden kann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
xyz00@hxx:~$ cd&lt;br /&gt;
xyz00@hxx:~$ touch .monitrc&lt;br /&gt;
xyz00@hxx:~$ chmod 0600 .monitrc&lt;br /&gt;
xyz00@hxx:~$ edit .monitrc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und füllen sie mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
set init&lt;br /&gt;
set daemon 600&lt;br /&gt;
set logfile /home/pacs/xyz00/var/monit.log&lt;br /&gt;
set mailserver localhost&lt;br /&gt;
set alert admin@example.tld&lt;br /&gt;
&lt;br /&gt;
check process apache2 with pidfile /home/pacs/xyz00/etc/apache2/run/apache2.pid&lt;br /&gt;
    start program &amp;quot;/bin/bash -c &#039;/home/pacs/xyz00/etc/apache2/apache2_start&#039;&amp;quot;&lt;br /&gt;
    stop program &amp;quot;/bin/bash -c &#039;/home/pacs/xyz00/etc/apache2/apache2_stop&#039;&amp;quot;&lt;br /&gt;
    if failed host example.tld port 8080 with timeout 60 seconds then restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Dieses Beispiel geht davon aus, dass die entsprechenden Start- und Stopskripte existieren und der Pfad zum pidfile des Apachen stimmt.&lt;br /&gt;
&lt;br /&gt;
== Monit Starten und Stoppen ==&lt;br /&gt;
&lt;br /&gt;
Wird nun per systemd realisiert dazu&lt;br /&gt;
&lt;br /&gt;
noch einen systemd service für Monit anlegen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;~/.config/systemd/user/monit.service&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=monit&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStartPre=rm -f %h/.monit.id&lt;br /&gt;
ExecStart=/usr/bin/monit -c %h/.monitrc&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Service aktivieren und starten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
$ systemctl --user enable monit.service&lt;br /&gt;
$ systemctl --user start monit.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Managed Server monitoren ==&lt;br /&gt;
&lt;br /&gt;
Bei der Nutzung eines Managed Server ist das Hostsharing-Mitglied selbst dafür verantwortlich, die Ressourcen des Servers&lt;br /&gt;
ausreichend zu dimensionieren. Monit kann helfen Engpässe zu entdecken.&lt;br /&gt;
&lt;br /&gt;
Mit den folgenden Zeilen in der .monitrc wird bei der Überschreitung von bestimmten Schwellwerten beim Load,&lt;br /&gt;
bei der RAM- und CPU-Auslastung und der Festplatten-Auslastung der E-Mail alarmiert und ins monit.log protokolliert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
check system h00.hostsharing.net&lt;br /&gt;
    if loadavg (1min) &amp;gt; 5 then alert&lt;br /&gt;
    if loadavg (5min) &amp;gt; 3 then alert&lt;br /&gt;
    if memory usage &amp;gt; 85% then alert&lt;br /&gt;
    if cpu usage (user) &amp;gt; 70% then alert&lt;br /&gt;
    if cpu usage (system) &amp;gt; 30% then alert&lt;br /&gt;
    if cpu usage (wait) &amp;gt; 20% then alert&lt;br /&gt;
&lt;br /&gt;
check device datafs with path /dev/vda2&lt;br /&gt;
    if failed permission 0660 then alert&lt;br /&gt;
    if failed uid root then alert&lt;br /&gt;
    if failed gid &amp;quot;disk&amp;quot; then alert&lt;br /&gt;
    if space usage &amp;gt; 85 % then alert&lt;br /&gt;
    if inode usage &amp;gt; 85 % then alert&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Logfiles kontrollieren ==&lt;br /&gt;
&lt;br /&gt;
Monit loggt entsprechend der Konfiguration seine &amp;quot;Taten&amp;quot; in ~/var/monit.log&lt;br /&gt;
&lt;br /&gt;
Damit das Logfile nicht zu groß wird, benutzen wir &#039;&#039;&#039;logrotate&#039;&#039;&#039;, das von [[cron]] aufgerufen wird, einmal pro Woche das Logfile komprimiert und zwei alte Versionen hält. Dazu erstellen wir die Konfigdatei .logrotate im Hauptverzeichnis des Users:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
touch .logrotate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Darin schreiben wir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
compress&lt;br /&gt;
&lt;br /&gt;
/home/pacs/xyz00/var/monit.log {&lt;br /&gt;
rotate 2&lt;br /&gt;
weekly&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun brauchen wir noch einen Aufruf von logrotate durch [[cron]]. Bitte beachten, logrotate merkt sich den letzten Zustand der Logdatei in einem Statusfile. Das muss in der [[Cron#Crontab|crontab]] mit angegeben werden. Wir editieren die crontab und schreiben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
27 7 * * 5	logrotate -s /home/pacs/xyz00/.logrotate_state /home/pacs/xyz00/.logrotate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit wird jeden Freitag um 7:27 Uhr das monit.log &amp;quot;rotiert&amp;quot;. &#039;&#039;&#039;Achtung:&#039;&#039;&#039; bitte einen anderen Tag und eine andere Uhrzeit wählen, damit nicht alle logrotates zur gleichen Zeit starten.&lt;br /&gt;
&lt;br /&gt;
== externe Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mmonit.com/monit/ Monit Homepage]&lt;br /&gt;
* [https://www.mmonit.com/monit/documentation/monit.html Monit Dokumentation]&lt;br /&gt;
* [https://www.mmonit.com/wiki/ Monit Wiki]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:eigene Daemons]]&lt;br /&gt;
[[Kategorie:Managed Server]]&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Domains&amp;diff=7277</id>
		<title>Domains</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Domains&amp;diff=7277"/>
		<updated>2025-02-14T11:23:02Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: Ljnk auf Kerndoku oben&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HSDoku-DomainLinks}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
= Domains bei Hostsharing = &lt;br /&gt;
&lt;br /&gt;
aktuelle Dokumentation:&lt;br /&gt;
&lt;br /&gt;
{{Kerndoku|https://www.hostsharing.net/doc/managed-operations-platform/domain/}}&lt;br /&gt;
&lt;br /&gt;
Die Domainverwaltung bei Hostsharing ist in zwei unabhängige Bereiche aufgeteilt:&lt;br /&gt;
&lt;br /&gt;
*  Die &#039;&#039;&#039;Domaineinrichtung&#039;&#039;&#039; in den HS-Paketen, zur Erstellung des Domainverzeichnisses unter [[~/]]doms im Paket und [[Aufschaltung]] einer Domain auf HS [[DNS|Name]]-, Mail- und Webserver. Dies geschieht mit [[hsadmin]] im Webfrontend oder auf der Kommandozeile.&lt;br /&gt;
&lt;br /&gt;
*  Das &#039;&#039;&#039;[http://www.domain-bestellsystem.de Domainbestellsystem]&#039;&#039;&#039; des HS-Partnerunternehmens Partnergate zur [[Konnektierung]], also der eigentlichen Registrierung von Domains bei einem Registrar, und zur Vergabe weiterer Aufträgen an Registrierungstellen. Jedes Mitglied von Hostsharing erhielt für dieses Domainbestellsystem Zugangsdaten, bestehend aus einem Benutzernamen der Form hs-xyz und einem Passwort.&lt;br /&gt;
&lt;br /&gt;
Bei anderen Hostern ist eine Domainbestellung teilweise eine feste Kopplung der Registrierung einer Domain mit Konnektierung und gleichzeitiger Aufschaltung auf bestimmte Nameserver und Webpakete. HS ist hier wesentlich flexibler. Der über HS angebotene Zugang zum Domain-Bestellsystem erlaubt es, Domains zu registrieren und auf frei wählbare DNS-Server zu konnektieren. Auf den HS Nameservern und Paketen lassen sich gleichzeitig beliebige weltweit registrierbare Domains einrichten. Hostsharing unterstützt damit die Einrichtung und den Betrieb von Domains die von beliebigen (auch sehr exotischen) Registrierungsstellen verwaltet und abgerechnet werden können.&lt;br /&gt;
&lt;br /&gt;
= Aktionen = &lt;br /&gt;
&lt;br /&gt;
Typische Domainaktionen beinhalten also koordinierte Änderungen sowohl in der Domainregistrierung als auch der HS-Einrichtung, wie in folgenden Seiten aufgezeigt:&lt;br /&gt;
&lt;br /&gt;
* Eine Domain einrichten: [[Domainregistrierung]]&amp;lt;br&amp;gt;&lt;br /&gt;
* Eine Domain kündigen: [[Domainkündigung]]&amp;lt;br&amp;gt;&lt;br /&gt;
* Verwalten von Domains, Subdomains, Eigentümer, Nameserver: [[Domainverwaltung]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Weiterführende Links =&lt;br /&gt;
&lt;br /&gt;
Was ist eine [[Domain]]&amp;lt;br&amp;gt;&lt;br /&gt;
Was ist ein [[Handles|Domainhandle]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[FAQ#Domains|Einträge zu Domains in der HS FAQ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Domains]]&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=DeltaChat&amp;diff=7276</id>
		<title>DeltaChat</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=DeltaChat&amp;diff=7276"/>
		<updated>2025-02-14T10:37:19Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* Einrichtung von Postfächern */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Delta Chat ==&lt;br /&gt;
&lt;br /&gt;
DeltaChat ist eine Messenger für Ende-zu-Ende-verschlüsselte Kommunikation mit Kurznachrichten. Die Funktionalität ist mit Signal, Threema oder WhatsApp oder mit den OpenSource Protokollen Matrix oder XMPP vergleichbar. Der Vorteil ist hier, dass DeltChat die Standard-Protokolle SMTP und IMAP verwendet, die Basis für die E-Mail Kommunikation sind. Diese Infrastruktur ist bei Hostsharing vorhanden und wird von der Genossenschaft gepflegt.&lt;br /&gt;
&lt;br /&gt;
Eigentlich könnte diese Seite also leer bleiben: Es gibt keine DeltaChat-Software, die Hostsharing-Mitlgieder auf ihrem Server  oder in ihrem Webspace installieren müssten. IMAP- und SMTP-Server sind als gemanagete Komponenten vorhanden.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitungen für die Nutzung von DeltaChat ===&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich kann man das normale Postfach auch für die Kommunikation mit DeltaChat nutzen. Oft wird als Argument für DeltaChat angeführt, dass man mit DeltaChat mit jeder E-Mail-Adresse kommunizieren kann. Ich empfehle das ausdrücklich nicht!&lt;br /&gt;
&lt;br /&gt;
==== Einrichtung einer Domain ====&lt;br /&gt;
&lt;br /&gt;
Daher richte ich für DeltaChat eine eigene Domain oder Subdomain ein. In diesem Artikel soll die Domain &amp;quot;chat.hs-example.de&amp;quot; sein. &lt;br /&gt;
&lt;br /&gt;
Ich lege einen Account als Domain-Verwaltung für die Domain ein und schalte die Domain bei diesem Account auf. Es ist sinnvoll für die Domain &amp;quot;Greylisting&amp;quot; zu deaktivieren. &amp;quot;DKIM&amp;quot; und &amp;quot;E-Mail-Autokonfiguration&amp;quot; sollten auf jeden Fall eingeschaltet bleiben!&lt;br /&gt;
&lt;br /&gt;
==== Anpassung des Zonefile ====&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich kann dieser Schritt übersprungen werden. Ich habe das Zonefile etwas vereinfacht und an die Konfiguration eines Chatmail-Server für DeltaChat angepasst.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; line&amp;gt;&lt;br /&gt;
{HEADER}&lt;br /&gt;
{SOA_RR}&lt;br /&gt;
{NS_RR}&lt;br /&gt;
{A_RR}&lt;br /&gt;
{AAAA_RR}&lt;br /&gt;
mta-sts.{DOM_HOSTNAME}.  CNAME  {DOM_HOSTNAME}.&lt;br /&gt;
www.{DOM_HOSTNAME}.  CNAME  {DOM_HOSTNAME}.&lt;br /&gt;
{MX_RR}&lt;br /&gt;
{MAILSERVICES_RR}  {SPF_RR}&lt;br /&gt;
_dmarc.{DOM_HOSTNAME}.  TXT &amp;quot;v=DMARC1;p=reject;adkim=s;aspf=s&amp;quot;&lt;br /&gt;
_mta-sts.{DOM_HOSTNAME}.  TXT &amp;quot;v=STSv1; id=202407031637&amp;quot;&lt;br /&gt;
{DKIM_RR}&lt;br /&gt;
_adsp._domainkey.{DOM_HOSTNAME}.  TXT &amp;quot;dkim=discardable&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für das &amp;quot;MTA-STS&amp;quot;-Verfahren muss zusätzliche eine kleine Textdatei unter URL &amp;quot;https://mta-sts.chat.example.com/.well-known/mta-sts.txt&amp;quot; der Subdomain &amp;quot;mts-sts&amp;quot; abgelegt werden. Der Inhalt zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; line&amp;gt;&lt;br /&gt;
version: STSv1&lt;br /&gt;
mode: enforce&lt;br /&gt;
mx: mailin1.hostsharing.net&lt;br /&gt;
mx: mailin2.hostsharing.net&lt;br /&gt;
mx: mailin3.hostsharing.net&lt;br /&gt;
max_age: 2419200&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Einrichtung von Postfächern ====&lt;br /&gt;
&lt;br /&gt;
Anschließend richte ich für jede Person, die DeltaChat nutzen soll ein Postfach und eine E-Mail-Adresse ein. Wenn die Accounts weitgehend anonym sein sollen, könnten die DeltaChat-Adressen so aussehen: &amp;quot;chat.295048@chat.hs-example.de&amp;quot; und &amp;quot;chat.873610@chat.hs-example.de&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Sei mein Webspace &amp;quot;xyz99&amp;quot;. In HSAdmin richte ich also Postfächer (User) ein: &amp;quot;xyz99-chat.295048&amp;quot; und &amp;quot;xyz99-chat.873610&amp;quot;. Wenn man für die User eine Quota für die SSD angibt, wird der Speicherbedarf in der DeltaChat-App auch angezeigt. Allerdings müssen alte Nachrichten auch gelöscht werden, sonst werden nach Überschreitung des Hardlimit oder der Gracetime keine Nachrichten mehr angenommen. &lt;br /&gt;
&lt;br /&gt;
Im letzten Schritt lege ich in HSAdmin die E-Mail-Adressen für DeltaChat an. Also die erste Adresse mit:&lt;br /&gt;
&lt;br /&gt;
* lokaler Teil: &amp;quot;chat.295048&amp;quot;&lt;br /&gt;
* Domain: &amp;quot;chat.hs-example.de&amp;quot;&lt;br /&gt;
* Postfach/Weiterleitung (Postfach wählen): &amp;quot;xyz99-chat.295048&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Das Feld &amp;quot;subdomain&amp;quot; bleibt leer. Die zweite und ggf. weitere Adressen analog anlegen.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://get.delta.chat/&lt;br /&gt;
* https://github.com/deltachat/interface/blob/main/uri-schemes.md &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Messenger]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=DeltaChat&amp;diff=7275</id>
		<title>DeltaChat</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=DeltaChat&amp;diff=7275"/>
		<updated>2025-02-14T10:36:31Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* Einrichtung von Postfächern */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Delta Chat ==&lt;br /&gt;
&lt;br /&gt;
DeltaChat ist eine Messenger für Ende-zu-Ende-verschlüsselte Kommunikation mit Kurznachrichten. Die Funktionalität ist mit Signal, Threema oder WhatsApp oder mit den OpenSource Protokollen Matrix oder XMPP vergleichbar. Der Vorteil ist hier, dass DeltChat die Standard-Protokolle SMTP und IMAP verwendet, die Basis für die E-Mail Kommunikation sind. Diese Infrastruktur ist bei Hostsharing vorhanden und wird von der Genossenschaft gepflegt.&lt;br /&gt;
&lt;br /&gt;
Eigentlich könnte diese Seite also leer bleiben: Es gibt keine DeltaChat-Software, die Hostsharing-Mitlgieder auf ihrem Server  oder in ihrem Webspace installieren müssten. IMAP- und SMTP-Server sind als gemanagete Komponenten vorhanden.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitungen für die Nutzung von DeltaChat ===&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich kann man das normale Postfach auch für die Kommunikation mit DeltaChat nutzen. Oft wird als Argument für DeltaChat angeführt, dass man mit DeltaChat mit jeder E-Mail-Adresse kommunizieren kann. Ich empfehle das ausdrücklich nicht!&lt;br /&gt;
&lt;br /&gt;
==== Einrichtung einer Domain ====&lt;br /&gt;
&lt;br /&gt;
Daher richte ich für DeltaChat eine eigene Domain oder Subdomain ein. In diesem Artikel soll die Domain &amp;quot;chat.hs-example.de&amp;quot; sein. &lt;br /&gt;
&lt;br /&gt;
Ich lege einen Account als Domain-Verwaltung für die Domain ein und schalte die Domain bei diesem Account auf. Es ist sinnvoll für die Domain &amp;quot;Greylisting&amp;quot; zu deaktivieren. &amp;quot;DKIM&amp;quot; und &amp;quot;E-Mail-Autokonfiguration&amp;quot; sollten auf jeden Fall eingeschaltet bleiben!&lt;br /&gt;
&lt;br /&gt;
==== Anpassung des Zonefile ====&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich kann dieser Schritt übersprungen werden. Ich habe das Zonefile etwas vereinfacht und an die Konfiguration eines Chatmail-Server für DeltaChat angepasst.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; line&amp;gt;&lt;br /&gt;
{HEADER}&lt;br /&gt;
{SOA_RR}&lt;br /&gt;
{NS_RR}&lt;br /&gt;
{A_RR}&lt;br /&gt;
{AAAA_RR}&lt;br /&gt;
mta-sts.{DOM_HOSTNAME}.  CNAME  {DOM_HOSTNAME}.&lt;br /&gt;
www.{DOM_HOSTNAME}.  CNAME  {DOM_HOSTNAME}.&lt;br /&gt;
{MX_RR}&lt;br /&gt;
{MAILSERVICES_RR}  {SPF_RR}&lt;br /&gt;
_dmarc.{DOM_HOSTNAME}.  TXT &amp;quot;v=DMARC1;p=reject;adkim=s;aspf=s&amp;quot;&lt;br /&gt;
_mta-sts.{DOM_HOSTNAME}.  TXT &amp;quot;v=STSv1; id=202407031637&amp;quot;&lt;br /&gt;
{DKIM_RR}&lt;br /&gt;
_adsp._domainkey.{DOM_HOSTNAME}.  TXT &amp;quot;dkim=discardable&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für das &amp;quot;MTA-STS&amp;quot;-Verfahren muss zusätzliche eine kleine Textdatei unter URL &amp;quot;https://mta-sts.chat.example.com/.well-known/mta-sts.txt&amp;quot; der Subdomain &amp;quot;mts-sts&amp;quot; abgelegt werden. Der Inhalt zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; line&amp;gt;&lt;br /&gt;
version: STSv1&lt;br /&gt;
mode: enforce&lt;br /&gt;
mx: mailin1.hostsharing.net&lt;br /&gt;
mx: mailin2.hostsharing.net&lt;br /&gt;
mx: mailin3.hostsharing.net&lt;br /&gt;
max_age: 2419200&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Einrichtung von Postfächern ====&lt;br /&gt;
&lt;br /&gt;
Anschließend richte ich für jede Person, die DeltaChat nutzen soll ein Postfach und eine E-Mail-Adresse ein. Wenn die Accounts weitgehend anonym sein sollen, könnten die DeltaChat-Adressen so aussehen: &amp;quot;chat.295048@chat.hs-example.de&amp;quot; und &amp;quot;chat.873610@chat.hs-example.de&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Sei mein Webspace &amp;quot;xyz99&amp;quot;. In HSAdmin richte ich also Postfächer (User) ein: &amp;quot;xyz99-chat.295048&amp;quot; und &amp;quot;xyz99-chat.873610&amp;quot;. Wenn man für die User eine Quota für die SSD angibt, wird der Speicherbedarf in der DeltaChat-App auch angezeigt. Allerdings müssen alte Nachrichten auch gelöscht werden, sonst werden nach Überschreitung des Hardlimit oder der Gracetime keine Nachrichten mehr angenommen. &lt;br /&gt;
&lt;br /&gt;
Im letzten Schritt lege ich in HSAdmin die E-Mail-Adressen für DeltaChat an. Also die erste Adresse mit:&lt;br /&gt;
&lt;br /&gt;
* lokaler Teil: &amp;quot;chat.295048&amp;quot;&lt;br /&gt;
* Domain: &amp;quot;chat.example.com&amp;quot;&lt;br /&gt;
* Postfach/Weiterleitung (Postfach wählen): &amp;quot;xyz99-chat.295048&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Das Feld &amp;quot;subdomain&amp;quot; bleibt leer. Die zweite und ggf. weitere Adressen analog anlegen.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://get.delta.chat/&lt;br /&gt;
* https://github.com/deltachat/interface/blob/main/uri-schemes.md &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Messenger]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=DeltaChat&amp;diff=7274</id>
		<title>DeltaChat</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=DeltaChat&amp;diff=7274"/>
		<updated>2025-02-14T10:34:20Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* Anpassung des Zonefile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Delta Chat ==&lt;br /&gt;
&lt;br /&gt;
DeltaChat ist eine Messenger für Ende-zu-Ende-verschlüsselte Kommunikation mit Kurznachrichten. Die Funktionalität ist mit Signal, Threema oder WhatsApp oder mit den OpenSource Protokollen Matrix oder XMPP vergleichbar. Der Vorteil ist hier, dass DeltChat die Standard-Protokolle SMTP und IMAP verwendet, die Basis für die E-Mail Kommunikation sind. Diese Infrastruktur ist bei Hostsharing vorhanden und wird von der Genossenschaft gepflegt.&lt;br /&gt;
&lt;br /&gt;
Eigentlich könnte diese Seite also leer bleiben: Es gibt keine DeltaChat-Software, die Hostsharing-Mitlgieder auf ihrem Server  oder in ihrem Webspace installieren müssten. IMAP- und SMTP-Server sind als gemanagete Komponenten vorhanden.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitungen für die Nutzung von DeltaChat ===&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich kann man das normale Postfach auch für die Kommunikation mit DeltaChat nutzen. Oft wird als Argument für DeltaChat angeführt, dass man mit DeltaChat mit jeder E-Mail-Adresse kommunizieren kann. Ich empfehle das ausdrücklich nicht!&lt;br /&gt;
&lt;br /&gt;
==== Einrichtung einer Domain ====&lt;br /&gt;
&lt;br /&gt;
Daher richte ich für DeltaChat eine eigene Domain oder Subdomain ein. In diesem Artikel soll die Domain &amp;quot;chat.hs-example.de&amp;quot; sein. &lt;br /&gt;
&lt;br /&gt;
Ich lege einen Account als Domain-Verwaltung für die Domain ein und schalte die Domain bei diesem Account auf. Es ist sinnvoll für die Domain &amp;quot;Greylisting&amp;quot; zu deaktivieren. &amp;quot;DKIM&amp;quot; und &amp;quot;E-Mail-Autokonfiguration&amp;quot; sollten auf jeden Fall eingeschaltet bleiben!&lt;br /&gt;
&lt;br /&gt;
==== Anpassung des Zonefile ====&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich kann dieser Schritt übersprungen werden. Ich habe das Zonefile etwas vereinfacht und an die Konfiguration eines Chatmail-Server für DeltaChat angepasst.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; line&amp;gt;&lt;br /&gt;
{HEADER}&lt;br /&gt;
{SOA_RR}&lt;br /&gt;
{NS_RR}&lt;br /&gt;
{A_RR}&lt;br /&gt;
{AAAA_RR}&lt;br /&gt;
mta-sts.{DOM_HOSTNAME}.  CNAME  {DOM_HOSTNAME}.&lt;br /&gt;
www.{DOM_HOSTNAME}.  CNAME  {DOM_HOSTNAME}.&lt;br /&gt;
{MX_RR}&lt;br /&gt;
{MAILSERVICES_RR}  {SPF_RR}&lt;br /&gt;
_dmarc.{DOM_HOSTNAME}.  TXT &amp;quot;v=DMARC1;p=reject;adkim=s;aspf=s&amp;quot;&lt;br /&gt;
_mta-sts.{DOM_HOSTNAME}.  TXT &amp;quot;v=STSv1; id=202407031637&amp;quot;&lt;br /&gt;
{DKIM_RR}&lt;br /&gt;
_adsp._domainkey.{DOM_HOSTNAME}.  TXT &amp;quot;dkim=discardable&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für das &amp;quot;MTA-STS&amp;quot;-Verfahren muss zusätzliche eine kleine Textdatei unter URL &amp;quot;https://mta-sts.chat.example.com/.well-known/mta-sts.txt&amp;quot; der Subdomain &amp;quot;mts-sts&amp;quot; abgelegt werden. Der Inhalt zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; line&amp;gt;&lt;br /&gt;
version: STSv1&lt;br /&gt;
mode: enforce&lt;br /&gt;
mx: mailin1.hostsharing.net&lt;br /&gt;
mx: mailin2.hostsharing.net&lt;br /&gt;
mx: mailin3.hostsharing.net&lt;br /&gt;
max_age: 2419200&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Einrichtung von Postfächern ====&lt;br /&gt;
&lt;br /&gt;
Anschließend richte ich für jede Person, die DeltaChat nutzen soll ein Postfach und eine E-Mail-Adresse ein. Wenn die Accounts weitgehend anonym sein sollen, könnten die DeltaChat-Adressen so aussehen: &amp;quot;chat.295048@chat.example.com&amp;quot; und &amp;quot;chat.873610@chat.example.com&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Sei mein Webspace &amp;quot;xyz99&amp;quot;. In HSAdmin richte ich also Postfächer (User) ein: &amp;quot;xyz99-chat.295048&amp;quot; und &amp;quot;xyz99-chat.873610&amp;quot;. Wenn man für die User eine Quota für die SSD angibt, wird der Speicherbedarf in der DeltaChat-App auch angezeigt. Allerdings müssen alte Nachrichten auch gelöscht werden, sonst werden nach Überschreitung des Hardlimit oder der Gracetime keine Nachrichten mehr angenommen. &lt;br /&gt;
&lt;br /&gt;
Im letzten Schritt lege ich in HSAdmin die E-Mail-Adressen für DeltaChat an. Also die erste Adresse mit:&lt;br /&gt;
&lt;br /&gt;
* lokaler Teil: &amp;quot;chat.295048&amp;quot;&lt;br /&gt;
* Domain: &amp;quot;chat.example.com&amp;quot;&lt;br /&gt;
* Postfach/Weiterleitung (Postfach wählen): &amp;quot;xyz99-chat.295048&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Das Feld &amp;quot;subdomain&amp;quot; bleibt leer. Die zweite und ggf. weitere Adressen analog anlegen.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://get.delta.chat/&lt;br /&gt;
* https://github.com/deltachat/interface/blob/main/uri-schemes.md &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Messenger]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=DeltaChat&amp;diff=7273</id>
		<title>DeltaChat</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=DeltaChat&amp;diff=7273"/>
		<updated>2025-02-14T10:32:54Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* Vorbereitungen für die Nutzung von DeltaChat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Delta Chat ==&lt;br /&gt;
&lt;br /&gt;
DeltaChat ist eine Messenger für Ende-zu-Ende-verschlüsselte Kommunikation mit Kurznachrichten. Die Funktionalität ist mit Signal, Threema oder WhatsApp oder mit den OpenSource Protokollen Matrix oder XMPP vergleichbar. Der Vorteil ist hier, dass DeltChat die Standard-Protokolle SMTP und IMAP verwendet, die Basis für die E-Mail Kommunikation sind. Diese Infrastruktur ist bei Hostsharing vorhanden und wird von der Genossenschaft gepflegt.&lt;br /&gt;
&lt;br /&gt;
Eigentlich könnte diese Seite also leer bleiben: Es gibt keine DeltaChat-Software, die Hostsharing-Mitlgieder auf ihrem Server  oder in ihrem Webspace installieren müssten. IMAP- und SMTP-Server sind als gemanagete Komponenten vorhanden.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitungen für die Nutzung von DeltaChat ===&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich kann man das normale Postfach auch für die Kommunikation mit DeltaChat nutzen. Oft wird als Argument für DeltaChat angeführt, dass man mit DeltaChat mit jeder E-Mail-Adresse kommunizieren kann. Ich empfehle das ausdrücklich nicht!&lt;br /&gt;
&lt;br /&gt;
==== Einrichtung einer Domain ====&lt;br /&gt;
&lt;br /&gt;
Daher richte ich für DeltaChat eine eigene Domain oder Subdomain ein. In diesem Artikel soll die Domain &amp;quot;chat.hs-example.de&amp;quot; sein. &lt;br /&gt;
&lt;br /&gt;
Ich lege einen Account als Domain-Verwaltung für die Domain ein und schalte die Domain bei diesem Account auf. Es ist sinnvoll für die Domain &amp;quot;Greylisting&amp;quot; zu deaktivieren. &amp;quot;DKIM&amp;quot; und &amp;quot;E-Mail-Autokonfiguration&amp;quot; sollten auf jeden Fall eingeschaltet bleiben!&lt;br /&gt;
&lt;br /&gt;
==== Anpassung des Zonefile ====&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich kann dieser Schritt übersprungen werden. Ich habe das Zonefile etwas vereinfacht und an die Konfiguration eine Chatmail-Server für DeltaChat angepasst.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; line&amp;gt;&lt;br /&gt;
{HEADER}&lt;br /&gt;
{SOA_RR}&lt;br /&gt;
{NS_RR}&lt;br /&gt;
{A_RR}&lt;br /&gt;
{AAAA_RR}&lt;br /&gt;
mta-sts.{DOM_HOSTNAME}.  CNAME  {DOM_HOSTNAME}.&lt;br /&gt;
www.{DOM_HOSTNAME}.  CNAME  {DOM_HOSTNAME}.&lt;br /&gt;
{MX_RR}&lt;br /&gt;
{MAILSERVICES_RR}  {SPF_RR}&lt;br /&gt;
_dmarc.{DOM_HOSTNAME}.  TXT &amp;quot;v=DMARC1;p=reject;adkim=s;aspf=s&amp;quot;&lt;br /&gt;
_mta-sts.{DOM_HOSTNAME}.  TXT &amp;quot;v=STSv1; id=202407031637&amp;quot;&lt;br /&gt;
{DKIM_RR}&lt;br /&gt;
_adsp._domainkey.{DOM_HOSTNAME}.  TXT &amp;quot;dkim=discardable&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für das &amp;quot;MTA-STS&amp;quot;-Verfahren muss zusätzliche eine kleine Textdatei unter URL &amp;quot;https://mta-sts.chat.example.com/.well-known/mta-sts.txt&amp;quot; der Subdomain &amp;quot;mts-sts&amp;quot; abgelegt werden. Der Inhalt zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; line&amp;gt;&lt;br /&gt;
version: STSv1&lt;br /&gt;
mode: enforce&lt;br /&gt;
mx: mailin1.hostsharing.net&lt;br /&gt;
mx: mailin2.hostsharing.net&lt;br /&gt;
mx: mailin3.hostsharing.net&lt;br /&gt;
max_age: 2419200&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Einrichtung von Postfächern ====&lt;br /&gt;
&lt;br /&gt;
Anschließend richte ich für jede Person, die DeltaChat nutzen soll ein Postfach und eine E-Mail-Adresse ein. Wenn die Accounts weitgehend anonym sein sollen, könnten die DeltaChat-Adressen so aussehen: &amp;quot;chat.295048@chat.example.com&amp;quot; und &amp;quot;chat.873610@chat.example.com&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Sei mein Webspace &amp;quot;xyz99&amp;quot;. In HSAdmin richte ich also Postfächer (User) ein: &amp;quot;xyz99-chat.295048&amp;quot; und &amp;quot;xyz99-chat.873610&amp;quot;. Wenn man für die User eine Quota für die SSD angibt, wird der Speicherbedarf in der DeltaChat-App auch angezeigt. Allerdings müssen alte Nachrichten auch gelöscht werden, sonst werden nach Überschreitung des Hardlimit oder der Gracetime keine Nachrichten mehr angenommen. &lt;br /&gt;
&lt;br /&gt;
Im letzten Schritt lege ich in HSAdmin die E-Mail-Adressen für DeltaChat an. Also die erste Adresse mit:&lt;br /&gt;
&lt;br /&gt;
* lokaler Teil: &amp;quot;chat.295048&amp;quot;&lt;br /&gt;
* Domain: &amp;quot;chat.example.com&amp;quot;&lt;br /&gt;
* Postfach/Weiterleitung (Postfach wählen): &amp;quot;xyz99-chat.295048&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Das Feld &amp;quot;subdomain&amp;quot; bleibt leer. Die zweite und ggf. weitere Adressen analog anlegen.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://get.delta.chat/&lt;br /&gt;
* https://github.com/deltachat/interface/blob/main/uri-schemes.md &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Messenger]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Grouprise&amp;diff=7076</id>
		<title>Grouprise</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Grouprise&amp;diff=7076"/>
		<updated>2024-11-23T10:26:20Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: veraltetes gelöscht&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation von Grouprise ==&lt;br /&gt;
&lt;br /&gt;
Grouprise / Stadtgestalten ist eine Software für die Menschen in einer Stadt oder Region. Sie ermöglicht es, dass einzelne Personen sich in Gruppen engagieren und austauschen. Grouprise ist freie Software (FOSS), die Lizenz ist die AGPL.&lt;br /&gt;
&lt;br /&gt;
Die Software beinhaltet eine Mailinglisten-ähnliche Funktionalität in Kombination mit der Diskussion über die HTML-Oberfläche. Für Die Mailfunktionalität nutzen wir hier die Subdomain, unter der auch die Anwendung läuft. Im Beispiel ist das &amp;quot;groups.hs-example.de&amp;quot;. Für diese Domain wird hier eine Catch-All-Mailadresse eingerichtet.&lt;br /&gt;
&lt;br /&gt;
==== Vorbereitungen in HSAdmin ====&lt;br /&gt;
&lt;br /&gt;
In HSAdmin werden angelegt:&lt;br /&gt;
* ein Service-User,&lt;br /&gt;
* eine Domain,&lt;br /&gt;
* ein Postgres-User und eine Datenbank,&lt;br /&gt;
* eine Catch-All E-Mail Adresse&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00@h00:~$ hsscript -i&lt;br /&gt;
Password: *********************&lt;br /&gt;
xyz00@hsadmin&amp;gt; user.add({ set: { name:&#039;xyz00-groups&#039;, password:&#039;******&#039;, shell:&#039;/bin/bash&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; domain.add({ set: { name:&#039;groups.hs-example.de&#039;, user:&#039;xyz00-groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqluser.add({ set: { name:&#039;xyz00_groups&#039;, password:&#039;******&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqldb.add({ set: { name:&#039;xyz00_groups&#039;, owner:&#039;xyz00_groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; emailaddress.add({ set: { localpart:&#039;&#039;, domain:&#039;groups.hs-example.de&#039;, target:&#039;xyz00-groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; bye&lt;br /&gt;
xyz00@h00:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Notizen zur Installation ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ git clone https://git.hack-hro.de/grouprise/grouprise.git&lt;br /&gt;
xyz00-groups@h00:~$ cd grouprise/&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ git tag&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ git checkout v5.5.1&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ make virtualenv-update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den Secret_Key kann man wie folgt erzeugen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 -c &amp;quot;import secrets; print(secrets.token_urlsafe(32))&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;$HOME/.config/grouprise/conf.d/grouprise.yaml&#039;&#039; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
domain: groups.hs-example.de&lt;br /&gt;
log_recipient_emails:&lt;br /&gt;
        - webmaster@groups.hs-example.de&lt;br /&gt;
database:&lt;br /&gt;
        engine: postgresql&lt;br /&gt;
        host: localhost&lt;br /&gt;
        name: xyz00_groups&lt;br /&gt;
        user: xyz00_groups&lt;br /&gt;
        password: &amp;quot;*****&amp;quot;&lt;br /&gt;
secret_key: &amp;quot;XXXXXXXXXXXXXXXXXXXXXXXXXXX&amp;quot;&lt;br /&gt;
feed_importer_gestalt_id: 1&lt;br /&gt;
operator_group_id: 1&lt;br /&gt;
unknown_gestalt_id: 32&lt;br /&gt;
&lt;br /&gt;
mailinglist_enabled: True&lt;br /&gt;
&lt;br /&gt;
branding:&lt;br /&gt;
        logo_backdrop: /-/site/logo_backdrop.svg&lt;br /&gt;
        logo_favicon: /-/site/favicon.ico&lt;br /&gt;
        logo_square: /-/site/logo_large.svg&lt;br /&gt;
        logo_text: /-/site/logo_text.svg&lt;br /&gt;
&lt;br /&gt;
backup_path: /home/storage/xyz00/users/groups/backup&lt;br /&gt;
&lt;br /&gt;
extra_django_settings_filenames:&lt;br /&gt;
        - /home/pacs/xyz00/users/groups/etc/settings.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Datenbankmigration und statische Assets erzeugen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/var&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/etc&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ . build/venv/bin/activate&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ python manage.py migrate&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ make&lt;br /&gt;
xyz00-groups@h00:~/grouprise$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Integration in den Apache ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00@h00:~$ hsscript -i&lt;br /&gt;
Password: *********************&lt;br /&gt;
xyz00@hsadmin&amp;gt; domain.update({where:{name:&#039;groups.hs-example.de&#039;},set:{passengerpython:&#039;/home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python&#039;,domainoptions:[&#039;htdocsfallback&#039;,&#039;indexes&#039;,&#039;dkim&#039;,&#039;passenger&#039;,&#039;autoconfig&#039;,&#039;greylisting&#039;,&#039;letsencrypt&#039;]}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; bye&lt;br /&gt;
xyz00@h00:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ cd $HOME/doms/groups.hs-example.de/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ rm -rf subs/www/ subs-ssl/www/ htdocs-ssl/.htaccess &lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ cd htdocs-ssl/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl$ mkdir stadt&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl$ cd stadt/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ ln -s $HOME/grouprise/static .&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ ln -s $HOME/grouprise/media .&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ cd $HOME/doms/groups.hs-example.de/app-ssl&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/app-ssl$ vi passenger_wsgi.py&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/app-ssl$ cat passenger_wsgi.py&lt;br /&gt;
import sys, os&lt;br /&gt;
sys.path.append(&amp;quot;/home/pacs/xyz00/users/groups/grouprise&amp;quot;)&lt;br /&gt;
from django.conf import settings&lt;br /&gt;
from django.core.wsgi import get_wsgi_application&lt;br /&gt;
os.environ.setdefault(&amp;quot;DJANGO_SETTINGS_MODULE&amp;quot;, &amp;quot;grouprise.settings&amp;quot;)&lt;br /&gt;
application = get_wsgi_application()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;$HOME/doms/groups.hs-example.de/app-ssl/passenger_wsgi.py&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
import sys, os&lt;br /&gt;
sys.path.append(&amp;quot;/home/pacs/xyz00/users/groups/grouprise&amp;quot;)&lt;br /&gt;
from django.conf import settings&lt;br /&gt;
from django.core.wsgi import get_wsgi_application&lt;br /&gt;
os.environ.setdefault(&amp;quot;DJANGO_SETTINGS_MODULE&amp;quot;, &amp;quot;grouprise.settings&amp;quot;)&lt;br /&gt;
application = get_wsgi_application()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Senden von E-Mail ====&lt;br /&gt;
&lt;br /&gt;
Der Versand auf E-Mail erfolgt asynchron durch einen eigenen Prozess. Das Starten des Prozess erfolgt von Hand wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd $HOME/grouprise&lt;br /&gt;
. build/venv/bin/activate&lt;br /&gt;
python manage.py run_huey --logfile $HOME/var/huey_consumer.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es ist sinnvoll ein kleines Start- und Stopskript zu schreiben und den Prozess zum Beispiel mit &amp;quot;monit&amp;quot; zu kontrollieren.&lt;br /&gt;
&lt;br /&gt;
==== Empfang von E-Mail ====&lt;br /&gt;
&lt;br /&gt;
Ankommmende E-Mail an ein Grouprise-Forum werden über die Datei &amp;quot;.forward&amp;quot; im $HOME des Service-Users in ein Skript &amp;quot;~/bin/mailin&amp;quot; geleitet.&lt;br /&gt;
&lt;br /&gt;
Inhalt des Skriptes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ cat bin/mailin&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
umask 0022&lt;br /&gt;
export LANG=de_DE.ISO-8859-1&lt;br /&gt;
(cd /home/pacs/xyz00/users/groups/stadtgestalten &amp;amp;&amp;amp; /home/pacs/xyz00/users/groups/stadtgestalten/build/venv/bin/python manage.py processincomingmessage)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;quot;.forward&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ cat .forward &lt;br /&gt;
|/home/pacs/xyz00/users/groups/bin/mailin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Suchfunktion ====&lt;br /&gt;
&lt;br /&gt;
Aufbau des Suchindex für Artikel in Grouprise&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/stadtgestalten&lt;br /&gt;
. build/venv/bin/activate&lt;br /&gt;
python manage.py clear_index &lt;br /&gt;
python manage.py rebuild_index&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Regelmäßige Updates des Suchindex per Cron:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ crontab -l&lt;br /&gt;
# m h  dom mon dow   command&lt;br /&gt;
HOME=/home/pacs/xyz00/users/groups&lt;br /&gt;
VIRTUAL_ENV=/home/pacs/xyz00/users/stadt/stadtgestalten/build/venv&lt;br /&gt;
PATH=/home/pacs/xyz00/users/groups/stadtgestalten/build/venv/bin:/home/pacs/xyz00/users/groups/.nvm/versions/node/v10.21.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games&lt;br /&gt;
MAILTO=webmaster@groups.hs-example.com&lt;br /&gt;
0 */5 * * * cd $HOME/stadtgestalten &amp;amp;&amp;amp; $VIRTUAL_ENV/bin/python manage.py update_index &amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
=== Webseite ===&lt;br /&gt;
&lt;br /&gt;
* https://grouprise.org&lt;br /&gt;
* https://git.hack-hro.de/grouprise/grouprise/ (Git Repository)&lt;br /&gt;
&lt;br /&gt;
=== Grouprise Installationen ===&lt;br /&gt;
&lt;br /&gt;
* https://stadtgestalten.org/ Rostock&lt;br /&gt;
* https://stadtimpuls.org/ Greifswald&lt;br /&gt;
* https://schwerin-aktiv.org/ Schwerin&lt;br /&gt;
&lt;br /&gt;
=== Handbuch für Nutzer:innen ===&lt;br /&gt;
&lt;br /&gt;
* https://stadtgestalten.org/stadtgestalten/tools/&lt;br /&gt;
* https://stadtgestalten.org/stadtgestalten/tools-print/ (als PDF)&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7008</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7008"/>
		<updated>2024-10-23T19:20:10Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* SystemD Unit starten und stoppen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der alle anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen; auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontingent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Service unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen für die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit ===&lt;br /&gt;
&lt;br /&gt;
Die SystemD-Units für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. Ich verwende hier eine Beispielkonfiguration für eine GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmiersprache &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=file:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die meisten Eigenschaften sind selbsterklärend. Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird der die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : muss im Usermodus von SystemD immer &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind nicht definiert.&lt;br /&gt;
&lt;br /&gt;
=== RAM- und CPU-Limits ===&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit starten und stoppen ===&lt;br /&gt;
&lt;br /&gt;
Nachdem die SystemD-Unit definiert ist, soll der Dienst gestartet werden. &lt;br /&gt;
Für die Verwaltung des Dienstes stehen die folgenden Kommandos zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
==== Reload ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdateien im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; werden neu eingelesen. Dieses Kommando ist nach jeder Änderung einer  &#039;&#039;.service&#039;&#039;-Datei nötig.&lt;br /&gt;
&lt;br /&gt;
==== Start und Stopp ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user start gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user stop gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos zum Starten und Beenden des Dienstes.&lt;br /&gt;
&lt;br /&gt;
==== Enable und Disable ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user enable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user disable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos, die den Dienst für einen Reboot des Servers aktivieren bzw. deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Status ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zeigen den Status aller Dienste des Users bzw. eines bestimmten Dienstes an.&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7007</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7007"/>
		<updated>2024-10-23T19:19:44Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* SystemD Unit starten und stoppen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der alle anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen; auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontingent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Service unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen für die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit ===&lt;br /&gt;
&lt;br /&gt;
Die SystemD-Units für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. Ich verwende hier eine Beispielkonfiguration für eine GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmiersprache &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=file:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die meisten Eigenschaften sind selbsterklärend. Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird der die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : muss im Usermodus von SystemD immer &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind nicht definiert.&lt;br /&gt;
&lt;br /&gt;
=== RAM- und CPU-Limits ===&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit starten und stoppen ===&lt;br /&gt;
&lt;br /&gt;
nachdem die SystemD-Unit definiert ist, soll der Dienst gestartet werden. &lt;br /&gt;
Für die Verwaltung des Dienstes stehen die folgenden Kommandos zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
==== Reload ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdateien im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; werden neu eingelesen. Dieses Kommando ist nach jeder Änderung einer  &#039;&#039;.service&#039;&#039;-Datei nötig.&lt;br /&gt;
&lt;br /&gt;
==== Start und Stopp ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user start gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user stop gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos zum Starten und Beenden des Dienstes.&lt;br /&gt;
&lt;br /&gt;
==== Enable und Disable ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user enable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user disable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos, die den Dienst für einen Reboot des Servers aktivieren bzw. deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Status ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zeigen den Status aller Dienste des Users bzw. eines bestimmten Dienstes an.&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7006</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7006"/>
		<updated>2024-10-23T19:14:35Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* SystemD Unit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der alle anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen; auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontingent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Service unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen für die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit ===&lt;br /&gt;
&lt;br /&gt;
Die SystemD-Units für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. Ich verwende hier eine Beispielkonfiguration für eine GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmiersprache &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=file:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die meisten Eigenschaften sind selbsterklärend. Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird der die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : muss im Usermodus von SystemD immer &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind nicht definiert.&lt;br /&gt;
&lt;br /&gt;
=== RAM- und CPU-Limits ===&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit starten und stoppen ===&lt;br /&gt;
&lt;br /&gt;
Für die Verwaltung des Dienstes stehen die folgenden Kommandos zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
==== Reload ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdateien im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; werden neu eingelesen. Dieses Kommando ist nach jeder Änderung einer  &#039;&#039;.service&#039;&#039;-Datei nötig.&lt;br /&gt;
&lt;br /&gt;
==== Start und Stopp ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user start gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user stop gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos zum Starten und Beenden des Dienstes.&lt;br /&gt;
&lt;br /&gt;
==== Enable und Disable ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user enable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user disable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos, die den Dienst für einen Reboot des Servers aktivieren bzw. deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Status ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zeigen den Status aller Dienste des Users bzw. eines bestimmten Dienstes an.&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7005</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7005"/>
		<updated>2024-10-23T19:13:45Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* SystemD Unit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der alle anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen; auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontingent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Service unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen für die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit ===&lt;br /&gt;
&lt;br /&gt;
Die SystemD-Units für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. Ich verwende hier ein Beispiel für ein GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmierspreche &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=file:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die meisten Eigenschaften sind selbsterklärend. Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird der die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : muss im Usermodus von SystemD immer &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind nicht definiert.&lt;br /&gt;
&lt;br /&gt;
=== RAM- und CPU-Limits ===&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit starten und stoppen ===&lt;br /&gt;
&lt;br /&gt;
Für die Verwaltung des Dienstes stehen die folgenden Kommandos zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
==== Reload ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdateien im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; werden neu eingelesen. Dieses Kommando ist nach jeder Änderung einer  &#039;&#039;.service&#039;&#039;-Datei nötig.&lt;br /&gt;
&lt;br /&gt;
==== Start und Stopp ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user start gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user stop gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos zum Starten und Beenden des Dienstes.&lt;br /&gt;
&lt;br /&gt;
==== Enable und Disable ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user enable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user disable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos, die den Dienst für einen Reboot des Servers aktivieren bzw. deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Status ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zeigen den Status aller Dienste des Users bzw. eines bestimmten Dienstes an.&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7004</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7004"/>
		<updated>2024-10-23T19:12:14Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* Eigene Serverdienste mit SystemD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der alle anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen; auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontingent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Service unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen für die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit ===&lt;br /&gt;
&lt;br /&gt;
Die SystemD-Unit für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. Ich verwende hier ein Beispiel für ein GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmierspreche &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=file:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die meisten Eigenschaften sind selbsterklärend. Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird der die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : muss im Usermodus von SystemD immer &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind nicht definiert.&lt;br /&gt;
&lt;br /&gt;
=== RAM- und CPU-Limits ===&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit starten und stoppen ===&lt;br /&gt;
&lt;br /&gt;
Für die Verwaltung des Dienstes stehen die folgenden Kommandos zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
==== Reload ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdateien im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; werden neu eingelesen. Dieses Kommando ist nach jeder Änderung einer  &#039;&#039;.service&#039;&#039;-Datei nötig.&lt;br /&gt;
&lt;br /&gt;
==== Start und Stopp ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user start gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user stop gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos zum Starten und Beenden des Dienstes.&lt;br /&gt;
&lt;br /&gt;
==== Enable und Disable ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user enable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user disable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos, die den Dienst für einen Reboot des Servers aktivieren bzw. deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Status ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zeigen den Status aller Dienste des Users bzw. eines bestimmten Dienstes an.&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7003</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7003"/>
		<updated>2024-10-23T19:11:11Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* RAM Kontingente */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der alle anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen; auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontingent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Service unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit ===&lt;br /&gt;
&lt;br /&gt;
Die SystemD-Unit für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. Ich verwende hier ein Beispiel für ein GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmierspreche &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=file:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die meisten Eigenschaften sind selbsterklärend. Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird der die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : muss im Usermodus von SystemD immer &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind nicht definiert.&lt;br /&gt;
&lt;br /&gt;
=== RAM- und CPU-Limits ===&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit starten und stoppen ===&lt;br /&gt;
&lt;br /&gt;
Für die Verwaltung des Dienstes stehen die folgenden Kommandos zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
==== Reload ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdateien im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; werden neu eingelesen. Dieses Kommando ist nach jeder Änderung einer  &#039;&#039;.service&#039;&#039;-Datei nötig.&lt;br /&gt;
&lt;br /&gt;
==== Start und Stopp ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user start gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user stop gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos zum Starten und Beenden des Dienstes.&lt;br /&gt;
&lt;br /&gt;
==== Enable und Disable ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user enable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user disable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos, die den Dienst für einen Reboot des Servers aktivieren bzw. deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Status ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zeigen den Status aller Dienste des Users bzw. eines bestimmten Dienstes an.&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7002</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7002"/>
		<updated>2024-10-23T19:10:26Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* RAM Kontingente */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der alle anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen; auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontingent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Server unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit ===&lt;br /&gt;
&lt;br /&gt;
Die SystemD-Unit für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. Ich verwende hier ein Beispiel für ein GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmierspreche &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=file:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die meisten Eigenschaften sind selbsterklärend. Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird der die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : muss im Usermodus von SystemD immer &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind nicht definiert.&lt;br /&gt;
&lt;br /&gt;
=== RAM- und CPU-Limits ===&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit starten und stoppen ===&lt;br /&gt;
&lt;br /&gt;
Für die Verwaltung des Dienstes stehen die folgenden Kommandos zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
==== Reload ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdateien im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; werden neu eingelesen. Dieses Kommando ist nach jeder Änderung einer  &#039;&#039;.service&#039;&#039;-Datei nötig.&lt;br /&gt;
&lt;br /&gt;
==== Start und Stopp ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user start gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user stop gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos zum Starten und Beenden des Dienstes.&lt;br /&gt;
&lt;br /&gt;
==== Enable und Disable ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user enable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user disable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos, die den Dienst für einen Reboot des Servers aktivieren bzw. deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Status ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zeigen den Status aller Dienste des Users bzw. eines bestimmten Dienstes an.&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7001</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7001"/>
		<updated>2024-10-23T19:09:45Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der alle anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen; auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontigent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Server unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit ===&lt;br /&gt;
&lt;br /&gt;
Die SystemD-Unit für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. Ich verwende hier ein Beispiel für ein GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmierspreche &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=file:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die meisten Eigenschaften sind selbsterklärend. Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird der die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : muss im Usermodus von SystemD immer &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind nicht definiert.&lt;br /&gt;
&lt;br /&gt;
=== RAM- und CPU-Limits ===&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit starten und stoppen ===&lt;br /&gt;
&lt;br /&gt;
Für die Verwaltung des Dienstes stehen die folgenden Kommandos zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
==== Reload ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdateien im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; werden neu eingelesen. Dieses Kommando ist nach jeder Änderung einer  &#039;&#039;.service&#039;&#039;-Datei nötig.&lt;br /&gt;
&lt;br /&gt;
==== Start und Stopp ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user start gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user stop gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos zum Starten und Beenden des Dienstes.&lt;br /&gt;
&lt;br /&gt;
==== Enable und Disable ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user enable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user disable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos, die den Dienst für einen Reboot des Servers aktivieren bzw. deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Status ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zeigen den Status aller Dienste des Users bzw. eines bestimmten Dienstes an.&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7000</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7000"/>
		<updated>2024-10-23T19:08:44Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der alle anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen, auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontigent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Server unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit ===&lt;br /&gt;
&lt;br /&gt;
Die SystemD-Unit für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. Ich verwende hier ein Beispiel für ein GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmierspreche &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=file:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die meisten Eigenschaften sind selbsterklärend. Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird der die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : muss im Usermodus von SystemD immer &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind nicht definiert.&lt;br /&gt;
&lt;br /&gt;
=== RAM- und CPU-Limits ===&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit starten und stoppen ===&lt;br /&gt;
&lt;br /&gt;
Für die Verwaltung des Dienstes stehen die folgenden Kommandos zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
==== Reload ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdateien im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; werden neu eingelesen. Dieses Kommando ist nach jeder Änderung einer  &#039;&#039;.service&#039;&#039;-Datei nötig.&lt;br /&gt;
&lt;br /&gt;
==== Start und Stopp ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user start gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user stop gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos zum Starten und Beenden des Dienstes.&lt;br /&gt;
&lt;br /&gt;
==== Enable und Disable ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user enable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user disable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos, die den Dienst für einen Reboot des Servers aktivieren bzw. deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Status ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zeigen den Status aller Dienste des Users bzw. eines bestimmten Dienstes an.&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6999</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6999"/>
		<updated>2024-10-23T19:06:49Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: Status&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der allen anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen, auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontigent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Server unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit ===&lt;br /&gt;
&lt;br /&gt;
Die SystemD-Unit für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. Ich verwende hier ein Beispiel für ein GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmierspreche &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=file:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die meisten Eigenschaften sind selbsterklärend. Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird der die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : muss im Usermodus von SystemD immer &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind nicht definiert.&lt;br /&gt;
&lt;br /&gt;
=== RAM- und CPU-Limits ===&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit starten und stoppen ===&lt;br /&gt;
&lt;br /&gt;
Für die Verwaltung des Dienstes stehen die folgenden Kommandos zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
==== Reload ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdateien im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; werden neu eingelesen. Dieses Kommando ist nach jeder Änderung einer  &#039;&#039;.service&#039;&#039;-Datei nötig.&lt;br /&gt;
&lt;br /&gt;
==== Start und Stopp ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user start gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user stop gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos zum Starten und Beenden des Dienstes.&lt;br /&gt;
&lt;br /&gt;
==== Enable und Disable ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user enable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user disable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos, die den Dienst für einen Reboot des Servers aktivieren bzw. deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Status ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zeigen den Status aller Dienste des Users bzw. eines bestimmten Dienstes an.&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6998</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6998"/>
		<updated>2024-10-23T19:04:54Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der allen anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen, auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontigent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Server unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit ===&lt;br /&gt;
&lt;br /&gt;
Die SystemD-Unit für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. Ich verwende hier ein Beispiel für ein GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmierspreche &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=file:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die meisten Eigenschaften sind selbsterklärend. Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird der die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : muss im Usermodus von SystemD immer &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind nicht definiert.&lt;br /&gt;
&lt;br /&gt;
=== RAM- und CPU-Limits ===&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit starten und stoppen ===&lt;br /&gt;
&lt;br /&gt;
Für die Verwaltung des Dienstes stehen die folgenden Kommandos zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
==== Reload ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdateien im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; werden neu eingelesen. Dieses Kommando ist nach jeder Änderung einer  &#039;&#039;.service&#039;&#039;-Datei nötig.&lt;br /&gt;
&lt;br /&gt;
==== Start und Stopp ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user start gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user stop gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos zum Starten und Beenden des Dienstes.&lt;br /&gt;
&lt;br /&gt;
==== Enable und Disable ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user enable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user disable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos, die den Dienst für einen Reboot des Servers aktivieren bzw. deaktivieren.&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6997</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6997"/>
		<updated>2024-10-23T19:03:58Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* Reload */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der allen anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen, auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontigent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Server unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit ===&lt;br /&gt;
&lt;br /&gt;
Die SystemD-Unit für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. Ich verwende hier ein Beispiel für ein GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmierspreche &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=file:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die meisten Eigenschaften sind selbsterklärend. Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird der die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : muss im Usermodus von SystemD immer &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind nicht definiert.&lt;br /&gt;
&lt;br /&gt;
=== RAM- und CPU-Limits ===&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit starten und stoppen ===&lt;br /&gt;
&lt;br /&gt;
Für die Verwaltung des Dienstes stehen die folgenden Kommandos zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
==== Reload ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdateien im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; werden neu eingelesen. Dieses Kommando ist nach jeder Änderung einer  &#039;&#039;.service&#039;&#039;-Datei nötig.&lt;br /&gt;
&lt;br /&gt;
==== Start und Stopp ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user start gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user stop gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos zum Starten und Beenden des Dienstes.&lt;br /&gt;
&lt;br /&gt;
==== Enable und Disable ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user enable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user disable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos, die den Dienst beim Reboot des Servers aktivieren bzw. deaktivieren.&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6996</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6996"/>
		<updated>2024-10-23T19:03:22Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* SystemD Unit starten und stoppen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der allen anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen, auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontigent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Server unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit ===&lt;br /&gt;
&lt;br /&gt;
Die SystemD-Unit für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. Ich verwende hier ein Beispiel für ein GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmierspreche &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=file:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die meisten Eigenschaften sind selbsterklärend. Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird der die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : muss im Usermodus von SystemD immer &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind nicht definiert.&lt;br /&gt;
&lt;br /&gt;
=== RAM- und CPU-Limits ===&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit starten und stoppen ===&lt;br /&gt;
&lt;br /&gt;
Für die Verwaltung des Dienstes stehen die folgenden Kommandos zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
==== Reload ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdateien im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; werden neu eingelesen. Dieses Kommando ist nach jeder Änderung eine &#039;&#039;.service&#039;&#039;-Datei nötig.&lt;br /&gt;
&lt;br /&gt;
==== Start und Stopp ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user start gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user stop gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos zum Starten und Beenden des Dienstes.&lt;br /&gt;
&lt;br /&gt;
==== Enable und Disable ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user enable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user disable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos, die den Dienst beim Reboot des Servers aktivieren bzw. deaktivieren.&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6995</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6995"/>
		<updated>2024-10-23T19:01:27Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: Start Stop Enable&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der allen anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen, auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontigent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Server unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit ===&lt;br /&gt;
&lt;br /&gt;
Die SystemD-Unit für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. Ich verwende hier ein Beispiel für ein GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmierspreche &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=file:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die meisten Eigenschaften sind selbsterklärend. Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird der die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : muss im Usermodus von SystemD immer &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind nicht definiert.&lt;br /&gt;
&lt;br /&gt;
=== RAM- und CPU-Limits ===&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit starten und stoppen ===&lt;br /&gt;
&lt;br /&gt;
Für die Verwaltung des Dienstes stehen die folgenden Kommandos zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdateien im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; werden neu eingelesen. Dieses Kommando ist nach jeder Änderung eine &#039;&#039;.service&#039;&#039;-Datei nötig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user start gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user stop gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos zum Starten und Beenden der Dienstes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user enable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user disable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommados, die den Dienst beim Reboot des Servers aktivieren bzw. deaktivieren.&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6994</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6994"/>
		<updated>2024-10-23T18:52:47Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* RAM- und CPU-Limits */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der allen anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen, auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontigent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Server unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit ===&lt;br /&gt;
&lt;br /&gt;
Die SystemD-Unit für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. Ich verwende hier ein Beispiel für ein GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmierspreche &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=file:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die meisten Eigenschaften sind selbsterklärend. Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird der die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : muss im Usermodus von SystemD immer &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind nicht definiert.&lt;br /&gt;
&lt;br /&gt;
=== RAM- und CPU-Limits ===&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6993</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6993"/>
		<updated>2024-10-23T18:52:35Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* RAM- und CPU-Limits */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der allen anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen, auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontigent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Server unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit ===&lt;br /&gt;
&lt;br /&gt;
Die SystemD-Unit für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. Ich verwende hier ein Beispiel für ein GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmierspreche &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=file:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die meisten Eigenschaften sind selbsterklärend. Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird der die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : muss im Usermodus von SystemD immer &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind nicht definiert.&lt;br /&gt;
&lt;br /&gt;
=== RAM- und CPU-Limits ===&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuoa : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6992</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6992"/>
		<updated>2024-10-23T18:51:07Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: ResourceAccounting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der allen anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen, auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontigent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Server unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== SystemD Unit ===&lt;br /&gt;
&lt;br /&gt;
Die SystemD-Unit für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. Ich verwende hier ein Beispiel für ein GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmierspreche &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=file:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die meisten Eigenschaften sind selbsterklärend. Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird der die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : muss im Usermodus von SystemD immer &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind nicht definiert.&lt;br /&gt;
&lt;br /&gt;
=== RAM- und CPU-Limits ===&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6991</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6991"/>
		<updated>2024-10-23T18:41:02Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* Eigene Serverdienste mit SystemD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der allen anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen, auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontigent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Server unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
Die SystemD-Unit für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. Ich verwende hier ein Beispiel für ein GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmierspreche &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=file:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die meisten Eigenschaften sind selbsterklärend. Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird der die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : muss im Usermodus von SystemD immer &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind nicht definiert.&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6990</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6990"/>
		<updated>2024-10-23T18:40:15Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: Eigenschaften&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der allen anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen, auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontigent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Server unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
Die SystemD-Unit für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. Ich verwende hier ein Beispiel für ein GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmierspreche &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=file:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die meisten Eigenschaften sind selbsterklärend. Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei in die die Standardausgabe des leufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechen zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird der die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : muss im Usermodus von SystemD immer &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind nicht definiert.&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6989</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6989"/>
		<updated>2024-10-23T18:39:15Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: Eigenschaften&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der allen anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen, auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontigent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Server unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
Die SystemD-Unit für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. Ich verwende hier ein Beispiel für ein GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmierspreche &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=file:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die meisten Eigenschaften sind selbsterklärend. Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei in die die Standardausgabe des leufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechen zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird der die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : Für /tmp und /var/tmp werden im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : muss im Usermodus von SystemD immer &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind nicht definiert.&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6988</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6988"/>
		<updated>2024-10-23T18:24:25Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: /* Eigene Serverdienste mit SystemD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der allen anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen, auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontigent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Server unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
Die SystemD-Unit für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. Ich verwende hier ein Beispiel für ein GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmierspreche &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=file:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
NoNewPrivileges=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die meisten Eigenschaften sind selbsterklärend. Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
:Type:&#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6987</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6987"/>
		<updated>2024-10-23T18:19:38Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: einfache Service-Unit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der allen anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen, auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontigent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Server unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
Die SystemD-Unit für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. Ich verwende hier ein Beispiel für ein GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmierspreche &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=file:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
NoNewPrivileges=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6986</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6986"/>
		<updated>2024-10-23T17:38:22Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: syntax&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der allen anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen, auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontigent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Server unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
Die SystemD-Unit für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line&amp;gt;&lt;br /&gt;
fdf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6985</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6985"/>
		<updated>2024-10-23T17:37:48Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: syntax&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der allen anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen, auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontigent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Server unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
Die SystemD-Unit für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6984</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6984"/>
		<updated>2024-10-23T17:34:25Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: .config-Verzeichnis&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der allen anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen, auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontigent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Server unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
 systemctl status pacs-xyz00.slice&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
 Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
 echo $XDG_RUNTIME_DIR&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
 xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
 /run/user/112345&lt;br /&gt;
 xyz00-service@h01:~$ &lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
Die SystemD-Unit für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
 mkdir -p $HOME/.config/systemd/user&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6983</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6983"/>
		<updated>2024-10-23T17:29:11Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: XDG_RUNTIME_DIR&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der allen anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen, auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontigent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Server unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
 systemctl status pacs-xyz00.slice&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
 Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit SystemD ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki findet sich viele Beispiele für SystemD-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
 echo $XDG_RUNTIME_DIR&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
 xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
 /run/user/112345&lt;br /&gt;
 xyz00-service@h01:~$ &lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6982</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=6982"/>
		<updated>2024-10-23T14:57:36Z</updated>

		<summary type="html">&lt;p&gt;Hsh-peterhormanns: RAM Kontigente&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;SystemD&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der allen anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann SystemD nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von SystemD zu starten. In einem Webspace im Shared Hosting ist es zwingend SystemD als Prozessmonitor für eigene Serverdienste zu nutzen, auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== RAM Kontigente ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontigent in Schritten von jeweils 128 Ḿegabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Server unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
 systemctl status pacs-xyz00.slice&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
 Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;/div&gt;</summary>
		<author><name>Hsh-peterhormanns</name></author>
	</entry>
</feed>