Ich habe diesen Cronjob eingestellt:
* * * * * /usr/bin/systemctl suspend
Und es funktioniert nicht. Aber ich kann es in einer Shell ausführen und es funktioniert. Ich verstehe nicht, was nicht funktionieren könnte.
EDIT
Umleitung der Fehlerausgabe zu /tmp/error
:
Failed to issue method call: Access denied
Failed to issue method call: Access denied
Meine Frage lautet dann: Werden Cronjobs beispielsweise als Spezialbenutzer ausgeführt cron
, was erklären würde, dass mein Benutzer den Befehl ausführen kann, aber nicht cron
selbst?
Zusätzliche Erklärung:
Dies ist ein minimales Beispiel für ein Problem in einem Skript (das sinnvoller ist als der hier angegebene einzelne Befehl).
systemctl
ist ein Teil vonsystemd
. Ich denke Neustart, Herunterfahren, Suspendieren arbeiten mit einem Nicht-Root-Benutzer mitsystemd
. Wie auch immer, es funktioniert auf meinem System.Schließlich verwende ich Arch Linux und
/bin
,/usr/sbin
,/sbin
sind alle Symlinks/usr/bin
.
systemctl
ist in/usr/bin
und akzeptiertsuspend
wie das? Was * nix benutzt du?systemctl suspend
funktioniert nicht in Debian- oder RedHat-Distributionen) und erklärt auch, dass Sie nicht wirklich das tun möchten, was Sie anzeigen :). Versuchen2> /tmp/error
Sie auch, Fehler hinzuzufügen oder zu erfassen, die möglicherweise auftreten. Sagen Sie uns abschließend, welcher Benutzer diese crontab ausführt.Antworten:
Ich kann als solche nicht wirklich antworten, aber ich denke, ich kann Sie in die richtige Richtung weisen. Ich fand dies in der Arch Wiki- Seite von
systemd
:Dies schlägt mir folgende Möglichkeiten vor:
Sie haben einen anderen Benutzer angemeldet. Vielleicht haben Sie sich über ein tty angemeldet?
cron
führt seine Befehle mit/bin/sh
. In Arch ist dies standardmäßig ein Symlink zu/bin/bash
. Dies würde bedeuten, dasscron
eine nicht interaktive Bash-Shell gestartet wird, die dann erkennt, dass eine andere Benutzersitzung ausgeführt wird (Ihre), sodass siesystemctl
trotz Ausführung als Benutzer nicht zur Ausführung berechtigt ist .Wenn Ihr Problem also darin besteht, dass
cron
es nicht ausgeführt werden darf,systemctl
weil Sie bereits angemeldet sind, können Sie das möglicherweise umgehen , indem Sie mit Polkit spielen, aber ich habe dort keine Erfahrung, sodass ich nicht helfen kann.quelle
w
unduptime
aus den Skripten von Cron ausgeführt. Ihre Ausgaben zeigten an, dass es nur Benutzer gab. Bedeutet dies, dass es ein anderes Problem gibt?Eine einfache Problemumgehung besteht darin, die crontab von root anstelle Ihrer eigenen zu verwenden. Bearbeiten Sie es mit:
Anstatt von:
quelle
Zitat von hier :
quelle
Wenn Sie die System-Crontab verwenden, vergessen Sie das Benutzerfeld. Versuchen:
quelle
/etc/crontab
, ist dies eine Crontab, mit der Siecron -e
als normaler Benutzer erstellt haben?crontab -e
als normaler Benutzer erstellt habe.systemctl suspend
ohne sudo zu laufen .Sie müssen die Konfigurationsdatei systemd in verwenden
/etc/systemd/system
quelle