Anwendungen über @reboot crontab starten als wäre man direkt "da"
Anwendungen über @reboot crontab starten als wäre man direkt "da"
Hallo zusammen,
zur Zeit mache ich folgendes:
- Ich logge mich als User (ohne root) ein.
- starte einen screen
- und starte bspw. ein Node Script, welches einen Server Port über 3000 öffnet
Ich würde gerne diesen Ablauf automatisieren.
Dazu erstellte ich mich mir ein Script, welches im Kopf #!/bin/bash und dann gleich via screen direkt das NodeScript startet.
Das Script hat natürlich ausführrecht und funktioniert auch direkt in der Console ohne Probleme.
Doch starte ich das System mal neu, passiert leider nichts :-/
Jetzt bin ich total am rätseln, woran das nur liegen kann.
Gibt es irgendwelche Parameter die man in oder vor Screen irgenwie festlegen muss?
@reboot ~/node.sh
chmod +x ~/node.sh #:
#!/bin/bash
cd ~/web/
screen node server/server.js
zur Zeit mache ich folgendes:
- Ich logge mich als User (ohne root) ein.
- starte einen screen
- und starte bspw. ein Node Script, welches einen Server Port über 3000 öffnet
Ich würde gerne diesen Ablauf automatisieren.
Dazu erstellte ich mich mir ein Script, welches im Kopf #!/bin/bash und dann gleich via screen direkt das NodeScript startet.
Das Script hat natürlich ausführrecht und funktioniert auch direkt in der Console ohne Probleme.
Doch starte ich das System mal neu, passiert leider nichts :-/
Jetzt bin ich total am rätseln, woran das nur liegen kann.
Gibt es irgendwelche Parameter die man in oder vor Screen irgenwie festlegen muss?
@reboot ~/node.sh
chmod +x ~/node.sh #:
#!/bin/bash
cd ~/web/
screen node server/server.js
- cosinus
- Beiträge: 3441
- Registriert: 08.02.2016 13:44:11
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: Bremen
Re: Anwendungen über @reboot crontab starten als wäre man direkt "da"
Und nun mal langsam und von vorn. Was genau trägst du bitte wo ein?
Wäre vllt die /etc/rc.local was für dich?
Wäre vllt die /etc/rc.local was für dich?
Re: Anwendungen über @reboot crontab starten als wäre man direkt "da"
in die "crontab -e" damit es nach einem Neustart automatisch neu gestartet wird (bzw. soll).cosinus hat geschrieben:17.12.2022 03:49:59Und nun mal langsam und von vorn. Was genau trägst du bitte wo ein?
Wäre vllt die /etc/rc.local was für dich?
Mit Simplen Befehlen bzw. Scripten klappt das prima, doch hier fehlt irgendwas leider.
Das ist leider ein Problem, auf welches ich immer wiedere Stoße. Nicht nur mit NodeJS.
Ich vermute man muss nur irgendeine Datei vielleicht einlesen, bevor man in dem Fall Node startet und schon läuft alles prima.
. /etc/rc.local ist es leider nicht
PS: Das ganze natürlich ohne root-Rechte, da das Script ja auch nicht ausbrechen können darf.
Re: Anwendungen über @reboot crontab starten als wäre man direkt "da"
Was auch oft hilft, ist die Programme mit dem kompletten Pfad einzutragen. Damit fängt man Probleme durch unterschiedliche Environment Einstellungen in der Login Shell und dem crontab Environment ab.
Re: Anwendungen über @reboot crontab starten als wäre man direkt "da"
Versuch mal mit wirksamem:lilan hat geschrieben:17.12.2022 08:58:32Ich vermute man muss nur irgendeine Datei vielleicht einlesen, bevor man in dem Fall Node startet und schon läuft alles prima.
Code: Alles auswählen
net.ipv4.ip_nonlocal_bind = 1
net.ipv6.ip_nonlocal_bind = 1
EDIT:
BTW: Voraussetzung ist, dass dein Script so geschrieben/konzipiert ist, dass es auch mit Hilfe einer service-unit gestartet werden kann.
Re: Anwendungen über @reboot crontab starten als wäre man direkt "da"
- cron ist die falsche Stelle, um Programme und/oder Skritpe beim Booten zu starten. Nur, weil cron es trotzdem anbietet, ist es noch immer nicht das richtige Vorgehen.
- rc.local würde funktionieren, ist aber ein veraltetes Konzept.
- Systemdienste startet man heutzutage über systemd (früher über SysV-Init).
- Zu startende Programme/Skripte sind immer mit vollem Pfad anzugeben, sonst findet dein System sie nicht.
Code: Alles auswählen
cd ~/web/
Code: Alles auswählen
cd /home/lilan/web
Warum willst du denn das Script in "screen" starten? Bei Nutzung einer Systemd-Unit ist das überflüssig. Auch die Angabe eines Benutzeres, unter dem das Programm/Skript laufen soll, ist hier möglich.
Man kann auch spezifizieren, daß solche Programm/Skript erst gestartet werden, wenn bestimmte Voraussetzungen gegeben sind. Z.B. wäre ers sinnvoll, dein Skript erst zu starten, wenn das Netzwerk hochgefahren ist. Der Einbau von Warteschleifen (z.B. mit sleep) erübrigt sich dann komplett, was letzten Endes zuverlässig ist, sleeps sind es hingegen überhaupt nicht.
Der Inhalt einer systemd-unit könnte so aussehen:
Code: Alles auswählen
[Unit]
Description=Node JS Dienst
After=network.target
[Service]
User=lilan
Group=lilan
ExecStart=/usr/bin/node /home/lilan/web/server/server.js
Type=simple
Restart=always
KillMode=process
[Install]
WantedBy=multi-user.target
Re: Anwendungen über @reboot crontab starten als wäre man direkt "da"
Weil ich ungefähr 8 Dienste benutze, welche alle auch über mehrere Screens starten.MSfree hat geschrieben:17.12.2022 13:11:54...
Warum willst du denn das Script in "screen" starten? Bei Nutzung einer Systemd-Unit ist das überflüssig. Auch die Angabe eines Benutzeres, unter dem das Programm/Skript laufen soll, ist hier möglich.
Einige davon muss ich manchmal pausieren/stoppen.. in den Debugmodus umschalten.. und dann wieder in "Produktiv" umschalten.
Würde das als Daemon laufen, müsste ich aufwendig log-Dateien sichten und benötige bei Problemen deutlich mehr Zeit.
Es suche deshalb eine Lösung, wie ich es einfach als Screen von Crontab aus starten kann.
Dazu braucht man nicht mal root-Rechte, was ich als deutlichen Vorteil sehe. (was man für den Daemon auch benötigt)
Darunter fallen NodeJS (in vers. NodeJS-Version, hier herscht leider echt Chaos :-/), ein paar Python-Webserver auf vers. Ports und einige Monitortools.
- cosinus
- Beiträge: 3441
- Registriert: 08.02.2016 13:44:11
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: Bremen
Re: Anwendungen über @reboot crontab starten als wäre man direkt "da"
Naja. Soooo veraltet ist das auch nicht, immerhin wird das noch per systemd verwaltet. Man muss den Dienst doch nur aktivieren.MSfree hat geschrieben:17.12.2022 13:11:54rc.local würde funktionieren, ist aber ein veraltetes Konzept.
- jph
- Beiträge: 1049
- Registriert: 06.12.2015 15:06:07
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Greven/Westf.
Re: Anwendungen über @reboot crontab starten als wäre man direkt "da"
Einer von vielen richtigen Lösungswegen:
- systemd-User-Unit zum Start des Servers anlegen und in ~/.config/systemd/user/ ablegen, Anleitung siehe $ man systemd.unit
- systemd mitteilen, dass die neue Unit vorliegt: $ systemctl daemon-reload --user
- Unit aktivieren und unmittelbar starten: $ systemctl enable --user --now <unit>
- Über # loginctl enable-linger <user> dem User das Herumlungern erlauben.