crontab: an screen befehl übergeben

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
irgendwas
Beiträge: 278
Registriert: 04.04.2016 18:53:19
Lizenz eigener Beiträge: MIT Lizenz

crontab: an screen befehl übergeben

Beitrag von irgendwas » 24.10.2016 19:02:52

Hallo zusammen,

ich möchte gerne nach einem Neustart automatisch ein Programm starten.

Dazu wollte ich folgendes in die crontab vom Benutzer "onedrive" eintragen:

Code: Alles auswählen

@reboot /usr/bin/screen -dmS sitzung1 -X 'stuff "onedrive-d start --debug"\015'
oder aber auch das hier:

Code: Alles auswählen

@reboot /usr/bin/screen -dmS sitzung1 -p0 -X stuff$'onedrive-d start --debug\n'
Leider funktionieren diese Weg nicht. Wenn ich mir alle laufenden Prozesse anzeigen lass, findet sich weder screen, noch onedrive-d.

Der Befehl "onedrive-d start --debug" funktioniert von Hand im Terminal (auch unter screen & dem Benutzer onedrive) einwandfrei..
Vielleicht bin ich auf dem Holzweg oder seh vor lauter Bäumen den Wald nicht.. Würd mich freuen, wenn mir jemand auf die Sprünge helfen könnte

uname
Beiträge: 12046
Registriert: 03.06.2008 09:33:02

Re: crontab: an screen befehl übergeben

Beitrag von uname » 24.10.2016 22:18:23

Ich könnte mir vorstellen, dass der Befehl auf ^M (Ctrl + v + Center) enden muss.

Code: Alles auswählen

@reboot /usr/bin/screen -dmS sitzung1 -X 'stuff "onedrive-d start --debug^M'

irgendwas
Beiträge: 278
Registriert: 04.04.2016 18:53:19
Lizenz eigener Beiträge: MIT Lizenz

Re: crontab: an screen befehl übergeben

Beitrag von irgendwas » 25.10.2016 08:14:00

Danke für deine schnelle Antwort.
Leider klappt das nicht. Ich find in den Prozessen weiterhin kein onedrive-d oder screen.

Benutzeravatar
MSfree
Beiträge: 10686
Registriert: 25.09.2007 19:59:30

Re: crontab: an screen befehl übergeben

Beitrag von MSfree » 25.10.2016 09:02:15

Die crontab ist für deinen Zweck der falsch Ort. Für Onedrivce ist Netzwerkzugriff nötig und der ist in dem Moment, on dem cron den Job startet, noch nicht unbedingt vorhanden. Vermutlich wirst du in deinem Systemlog auch entsprechende Fehlermeldungen haben.

Schreib dir eine service-Datei für systemd, die dein Onedrive startet. Alternativ kannst du es auch als Startskript in die Anmeldung von deinem Desktop einbinden, wenn es sowieso nur für einen Benutzer eingerichtet werden soll.

irgendwas
Beiträge: 278
Registriert: 04.04.2016 18:53:19
Lizenz eigener Beiträge: MIT Lizenz

Re: crontab: an screen befehl übergeben

Beitrag von irgendwas » 25.10.2016 10:04:51

Danke für deine Antwort. Ein Startskript in die Anmeldung vom Desktop scheidet leider aus, weil sich der Benutzer nicht am System anmeldet, sondern alles im Hintergrund laufen soll.
Im syslog finde ich keine Fehlermeldungen, sondern lediglich:

Code: Alles auswählen

Oct 24 18:51:15 debian CRON[649]: (onedrive) CMD (/usr/bin/screen -d -m -S onedrivesitzung -X eval 'stuff ""onedrive-d start --debug""\015')"
Oct 24 18:51:19 debian postfix/pickup[1365]: F26EB5C0642: uid=1007 from=<onedrive>
Oct 24 18:51:20 debian postfix/qmgr[1366]: F26EB5C0642: from=<beispiel@beispieldomain.de>, size=647, nrcpt=1 (queue active)
Oct 24 18:51:21 debian postfix/smtp[1377]: F26EB5C0642: to=<beispiel@beispieldomain.de>, orig_to=<onedrive>, relay=smtp.mailserver.de[xxx.xxx.xxx.xxx]:587, delay=5.6, delays=4.7/0.54/0.3/0.07, dsn=2.0.0, status=sent (250 2.0.0 queued as d0b18ds9OGpK22H)
Oct 24 18:56:54 debian kbd[469]: Setting console screen modes.
Ich hab nun folgendes gemacht: (in /etc/systemd/system/onedrive-d.service)

Code: Alles auswählen

[Unit]
Description=onedrive-d

[Service]
User=onedrive
ExecStart=/usr/bin/python3 /usr/local/bin/onedrive-d --debug

[Install]
reboot.target
Jetzt stellt sich noch die Frage, wie ich das ganze in einer screen-Sitzung laufen lassen kann (und im Debug-Modus, um die ersten Tage alles nachvollziehen zu können)

EDIT: Aktiviert ist der Service noch nicht.

Benutzeravatar
MSfree
Beiträge: 10686
Registriert: 25.09.2007 19:59:30

Re: crontab: an screen befehl übergeben

Beitrag von MSfree » 25.10.2016 10:28:59

nobody2311 hat geschrieben:

Code: Alles auswählen

[Service]
User=onedrive
ExecStart=/usr/bin/python3 /usr/local/bin/onedrive-d --debug

[Install]
reboot.target
Ich würde dir vorschlagen, noch folgendes in der Servicedatei zu ergänzen:

Code: Alles auswählen

[Unit]
Description=OneDrive
After=network.target

[Service]
User=onedrive
ExecStart=/usr/bin/python3 /usr/local/bin/onedrive-d --debug
Type=simple
Restart=always
KillMode=process

[Install]
WantedBy=multi-user.target
Der Witz hierbei ist, daß onedrive automatisch neu gestartet wird, wenn es abstürzt oder sonstwie beendet wird.
Jetzt stellt sich noch die Frage, wie ich das ganze in einer screen-Sitzung laufen lassen kann (und im Debug-Modus, um die ersten Tage alles nachvollziehen zu können)
Warum willst du das in screen laufen lassen?
Die Meldungen, die onedrive wirft, landen doch sowieso im Syslog.
Ansonsten kannst du es doch auch interaktiv in screen starten, wenn es nur um Anlaufschwierigkeiten geht.

irgendwas
Beiträge: 278
Registriert: 04.04.2016 18:53:19
Lizenz eigener Beiträge: MIT Lizenz

Re: crontab: an screen befehl übergeben

Beitrag von irgendwas » 25.10.2016 11:05:52

Klappte im ersten Versuch noch nicht, aber das hinzufügen von "start" hat's dann gebracht

Code: Alles auswählen

[Unit]
Description=OneDrive
After=network.target

[Service]
User=onedrive
ExecStart=/usr/bin/python3 /usr/local/bin/onedrive-d start
Type=simple
Restart=always
KillMode=process

[Install]
WantedBy=multi-user.target
EDIT: syslog wird auch kräftig befüllt :wink:
Danke für deine Hilfe!
:hail: :THX:

Antworten