Debian 8 Script Autostart

Flo89

Rear Admiral
Registriert
Mai 2007
Beiträge
5.643
Auf einem Debian 8 möchte ich, dass die folgenden zwei Scripte beim Booten als User "seafile" gestartet werden:

seafile.sh start
seahub.sh start-fastcgi

Wie kann ich das bewerkstelligen?

Schritt 17 aus folgender Anleitung hatte auf einem Raspberry funktioniert, allerdings jetzt nicht auf einem Debian 8 x86-64:
Raspberry Pi: Owncloud-Alternative Seafile Server installieren/
Code:
sudo nano /etc/rc.local
Code:
su seafile -c '/home/seafile/seafile-server-latest/seafile.sh start && /home/seafile/seafile-server-latest/seahub.sh start-fastcgi'
Tatsächlicher Pfad der Scripte wäre:
Code:
su seafile -c '/var/lib/seafile/haiwen/seafile-server-latest/seafile.sh start && /var/lib/seafile/haiwen/seafile-server-latest/seahub.sh start-fastcgi'

Kann es sein, dass rc.local bei Debian 8 mit systemd nicht mehr funktioniert? Mache ich Syntaxfehler?

Ein manuelles Starten der Scripte funktioniert, allerdings verzweifle ich bei dem Versuch, sie beim Start automatisch zu starten :(
 
Übernimmt systemd das jetzt nicht? Oder hast du sysvinit?
 
Code:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

su seafile -c '/var/lib/seafile/haiwen/seafile-server-latest/seafile.sh start && /var/lib/seafile/haiwen/seafile-server-latest/seahub.sh start-fastcgi'

exit 0

(Wie kann ich text aus "/var/log/messages" über SSH rauskopieren?)

Ich denke schon, dass systemd auf dem Debian läuft. Wenn es das Starten der Scripte übernehmen soll, was muss ich dann tun?
 
Zuletzt bearbeitet:
Wenn ich die Schritte aus der Anleitung befolge, wird systemd beim Start die rc.local ausführen? Verstehe ich das richtig?
 
Habe den Ordner "system" angelegt, darin die Datei "rc-local.service" mit folgendem Inhalt erstellt:
Code:
[Unit]
Description=/etc/rc.local compatibility

[Service]
Type=oneshot
ExecStart=/etc/rc.local
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Dann allerdings folgendes Problem:

Code:
name@serverdebian:~$ sudo systemctl enable rc-local.service
The unit files have no [Install] section. They are not meant to be enabled
using systemctl.
Possible reasons for having this kind of units are:
1) A unit may be statically enabled by being symlinked from another unit's
   .wants/ or .requires/ directory.
2) A unit's purpose may be to act as a helper for some other unit which has
   a requirement dependency on it.
3) A unit may be started when needed via activation (socket, path, timer,
   D-Bus, udev, scripted systemctl call, ...).
Ergänzung ()

Habe es jetzt mit dem Dateinamen "rclocal.service" probiert, dann geht "systemctl enable rclocal.service" ohne Fehlermeldung durch.

Allerdings:
Code:
name@serverdebian:~$ systemctl status rclocal.service
● rclocal.service - /etc/rc.local compatibility
   Loaded: loaded (/usr/lib/systemd/system/rclocal.service; enabled)
   Active: failed (Result: exit-code) since So 2015-05-10 12:31:02 CEST; 14s ago
  Process: 1785 ExecStart=/etc/rc.local (code=exited, status=1/FAILURE)
 Main PID: 1785 (code=exited, status=1/FAILURE)

Wenn ich "sudo /etc/rc.local" eingebe werden die rc.local und die zwei darin angegebenen Scripte ausgeführt.

Nur beim Systemstart funktioniert dies nicht automatisch :-S
 
/usr/lib/systemd/system/rclocal.service
Code:
[Unit]
Description=/etc/rc.local compatibility

[Service]
Type=oneshot
ExecStart=/etc/rc.local
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target


Code:
name@serverdebian:~$ sudo systemctl start rclocal.service
Job for rclocal.service failed. See 'systemctl status rclocal.service' and 'journalctl -xn' for details.

Code:
name@serverdebian:~$ systemctl status rclocal.service
● rclocal.service - /etc/rc.local compatibility
   Loaded: loaded (/usr/lib/systemd/system/rclocal.service; enabled)
   Active: failed (Result: exit-code) since So 2015-05-10 14:35:26 CEST; 40s ago
  Process: 2028 ExecStart=/etc/rc.local (code=exited, status=1/FAILURE)
 Main PID: 2028 (code=exited, status=1/FAILURE)

Code:
name@serverdebian:~$ journalctl -xn
No journal files were found.

Hilft das weiter?
 
Zuletzt bearbeitet:
Systemd kann Shell-Skripte nicht direkt ausführen. Du musst ihm direkt sagen, dass er dafür die Bash nutzen soll. Nein, das Shebang wertet das System nicht aus.
Hier mal die vollständige Datei:

Code:
[Unit]
Description=/etc/rc.local compatibility
 
[Service]
Type=oneshot
ExecStart=/bin/bash /etc/rc.local
RemainAfterExit=yes
 
[Install]
WantedBy=multi-user.target

Danach folgendes als Root ausführen:
Code:
systemctl daemon-reload

Dann
Code:
 systemctl reenable rclocal.service

Zeig mal die Datei /usr/lib/systemd/system/rclocal.service

Mich interessiert, was debian da zusammengefrickelt hat.

Selbstdefinierte Unit-Files gehören in /etc/systemd/systen ,nicht /usr/lib/systemd/system/.
In letzteren Pfad kommen von Paketen bereitgestellte Dateien. Es ist also möglich, dass Apt
dadurch Probleme bekommt, wenn du sie dort speicherst.
 
Habe sie jetzt geändert und "/bin/bash" ergänzt:
Code:
[Unit]
Description=/etc/rc.local compatibility

[Service]
Type=oneshot
ExecStart=/bin/bash /etc/rc.local
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Code:
name@serverdebian:~$ systemctl status rclocal.service
● rclocal.service - /etc/rc.local compatibility
   Loaded: loaded (/usr/lib/systemd/system/rclocal.service; enabled)
   Active: active (exited) since So 2015-05-10 17:58:11 CEST; 2min 20s ago
  Process: 412 ExecStart=/bin/bash /etc/rc.local (code=exited, status=0/SUCCESS)
 Main PID: 412 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/rclocal.service

Allerdings wird die rc.local nicht ausgeführt. Rufe ich sie nach dem Boot manuell auf, funktioniert ihr Inhalt und seafile/seahub werden gestart.
Ergänzung ()

Habe meine rclocal.service jetzt von "/usr/lib/systemd/system/" nach "/etc/systemd/system/" verschoben.

Funktioniert aber immer noch nicht wie gewünscht, die rc.local wird beim Start nicht ausgeführt.

Oder liegt es am Inhalt, dass
Code:
[...]
su seafile -c '/var/lib/seafile/haiwen/seafile-server-latest/seafile.sh start && /var/lib/seafile/haiwen/seafile-server-latest/seahub.sh start-fastcgi'
[...]
nicht funktioniert?
Wie gesagt, wenn ich die rc.local manuell aufrufe (mit sudo und Passwort) funktioniert es.

Ist das Ausführen eines Scriptes beim Start mit Linux/Debian/systemd wirklich so kompliziert?
Gibt es einen anderen Weg, die zwei Scripte für seafile und seahub nach dem Booten auszuführen?
 
Zuletzt bearbeitet:
Laut systemd wurde die Datei ausgeführt. Und zwar erfolgreich, das steht ja da:

Code:
Active: active (exited) since So 2015-05-10 17:58:11 CEST; 2min 20s ago

Schau dir mal deine Systemlogs an, ob seafile beim Ausführen irgendwas ausgibt. Und vorallem, stell sicher, dass
seafile komplett ohne Umgebungsvariablen arbeiten kann. Ansonsten musst du system die Umgebungsvariablen
über eine Einstellung übergeben. Schau dir dazu die Einstellungen "Environment" und "EnvironmentFile" auf der Man-Page
von "systemd.exec" an.

Ein weiterer Punkt, den du klären musst, ist der Zeitpunkt, an dem das Skript ausgeführt werden soll. Was sollen die Variablen denn bewirken? Und wieso willst du überhaupt über ein Shell-Skript diese Befehle ausführen? Das kannst du auch so direkt über systemd machen. Nutze dazu die Option "User" und/oder Group. Schau dir dafür die Man-Page zu "systemd.service" an.
 
Zuletzt bearbeitet:
Zurück
Oben