Mam ten zestaw cronjob:
* * * * * /usr/bin/systemctl suspend
I to nie działa. Ale mogę uruchomić go w powłoce i działa. Nie rozumiem, co może nie działać.
EDYCJA
Wyjście błędu przekierowania /tmp/error
daje:
Failed to issue method call: Access denied
Failed to issue method call: Access denied
Moje pytanie brzmi zatem: czy cronjobs są uruchamiane jako specjalny użytkownik ( cron
na przykład), co wyjaśniałoby, że mój użytkownik może uruchomić polecenie, ale nie cron
sam?
Dodatkowe wyjaśnienie:
To minimalny przykład pokazujący problem, który mam w skrypcie (ma to większy sens niż podane tutaj pojedyncze polecenie)
systemctl
jest częściąsystemd
. Myślę, że restart, zamknięcie, zawieszenie działają z użytkownikiem innym niż rootsystemd
. W każdym razie działa w moim systemie.Wreszcie, używam Arch Linux i
/bin
,/usr/sbin
,/sbin
są wszystkie dowiązania do/usr/bin
.
systemctl
jest w/usr/bin
środku i tak to akceptujesuspend
? Jakiego * nix używasz?systemctl suspend
nie działa na dystrybucjach Debiana lub RedHata), więc wyjaśnia, że tak naprawdę nie chcesz robić tego, co pokazujesz :). Spróbuj także dodać2> /tmp/error
coś lub coś, aby uchwycić ewentualne błędy. Na koniec powiedz nam, który użytkownik uruchamia ten crontab.Odpowiedzi:
Naprawdę nie mogę odpowiedzieć jako taki, ale myślę, że mogę skierować cię w dobrym kierunku. Znalazłem to w Arch Wiki stronie o
systemd
:To sugeruje mi następujące możliwości:
Masz zalogowanego innego użytkownika. Być może zalogowałeś się przez tty?
cron
uruchamia polecenia za pomocą/bin/sh
. Domyślnie w Arch jest to dowiązanie symboliczne do/bin/bash
. Oznaczałobycron
to uruchomienie nieinteraktywnej powłoki bash, która następnie wykrywa, że jest uruchomiona inna sesja użytkownika (twoja), więc nie ma ona prawa do uruchomieniasystemctl
pomimo działania jako użytkownik.Więc jeśli twój problem jest spowodowany tym, że
cron
niesystemctl
możesz uruchomić, ponieważ jesteś już zalogowany, możesz być w stanie obejść ten problem, grając z polkit, ale nie mam tam doświadczenia, więc nie mogę pomóc.źródło
w
iuptime
ze skryptów uruchamianych przez crona. Ich wyniki wskazywały, że był tylko użytkownik. Czy to oznacza, że jest jakiś inny problem?Łatwym obejściem jest użycie crontab roota zamiast własnego. Edytuj za pomocą:
zamiast:
źródło
Cytowanie stąd :
źródło
Jeśli używasz crontab systemowego, zapominasz pola użytkownika. Próbować:
źródło
/etc/crontab
, czy to jest crontab, który utworzyłeścron -e
jako zwykły użytkownik?crontab -e
jako zwykły użytkownik.systemctl suspend
bez sudo.Musisz użyć pliku konfiguracji systemd w
/etc/systemd/system
źródło