J'ai cet ensemble de cronjob:
* * * * * /usr/bin/systemctl suspend
Et ça ne marche pas. Mais je peux l'exécuter dans un shell et cela fonctionne. Je ne comprends pas ce qui pourrait ne pas fonctionner.
EDIT
Rediriger la sortie d'erreur vers /tmp/error
donne ceci:
Failed to issue method call: Access denied
Failed to issue method call: Access denied
Ma question est alors: les cronjobs sont-ils exécutés en tant qu'utilisateur spécial ( cron
par exemple), ce qui expliquerait que mon utilisateur peut exécuter la commande, mais pas cron
lui-même?
Explication supplémentaire:
Ceci est un exemple minimal pour montrer un problème que j'ai dans un script (qui a plus de sens que la seule commande fournie ici)
systemctl
fait partie desystemd
. Je pense que le redémarrage, l'arrêt, la suspension fonctionnent avec un utilisateur non root avecsystemd
. Quoi qu'il en soit, cela fonctionne sur mon système.Enfin, j'utilise Arch Linux et
/bin
,/usr/sbin
,/sbin
sont tous les liens symboliques à/usr/bin
.
systemctl
est/usr/bin
dedans et il acceptesuspend
comme ça? Quel * nix utilisez-vous?systemctl suspend
ne fonctionne pas sur les distributions Debian ou RedHat) et explique donc que vous ne voulez pas vraiment faire ce que vous montrez :). Essayez également d'ajouter2> /tmp/error
ou quelque chose pour capturer les erreurs que vous pourriez rencontrer. Enfin, dites-nous quel utilisateur exécute cette crontab.Réponses:
Je ne peux pas vraiment répondre comme tel mais je pense que je peux vous orienter dans la bonne direction. J'ai trouvé cela sur la page Arch Wiki de
systemd
:Cela me suggère les possibilités suivantes:
Vous avez un autre utilisateur connecté. Peut-être vous êtes-vous connecté via un tty?
cron
exécute ses commandes à l'aide de/bin/sh
. Par défaut , sur Arch, il s'agit d'un lien symbolique vers/bin/bash
. Cela signifierait quecron
démarre un shell bash non interactif qui détecte alors qu'une autre session utilisateur est en cours d'exécution (la vôtre), il n'a donc pas le droit de s'exécutersystemctl
malgré son exécution en tant qu'utilisateur.Donc, si votre problème est dû au fait qu'il
cron
n'est pas autorisé à s'exécutersystemctl
parce que vous êtes déjà connecté, vous pourrez peut-être contourner cela en jouant avec polkit mais je n'y ai aucune expérience, je ne peux donc pas vous aider.la source
w
et àuptime
partir des scripts exécutés par cron. Leurs sorties ont indiqué qu'il n'y avait qu'un seul utilisateur. Alors, cela signifie-t-il qu'il y a un autre problème?Une solution de contournement simple consiste à utiliser le crontab de root au lieu du vôtre. Modifiez-le avec:
au lieu de:
la source
Citant d' ici :
la source
Si vous utilisez le système crontab, vous oubliez le champ utilisateur. Essayer:
la source
/etc/crontab
, est-ce un tableau croisé que vous avez créé aveccron -e
votre utilisateur normal?crontab -e
un utilisateur normal.systemctl suspend
sans sudo.Vous devez utiliser le fichier de configuration systemd dans
/etc/systemd/system
la source