Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 16/12/2016, à 18:10

alex_gaz

crontab -e shutdown -h now

Bonjour à tous,

Noob parmi les Noob, je suis passé sous Ubuntu en Septembre, et ai commencé la console depuis seulement un mois. Je commence tout juste donc à "bidouiller" et me sens bien seul parfois devant mon petit curseur blanc sur fond violet.

Voici ma question :

- Je souhaite mettre en place un arrêt automatique de mon PC tous les soir à 2h00 du matin.
- J'ai essayé la commande halt qui a tendance à sortir du système mais sans arrêter l'ordinateur, j'utilise donc shutdown -h now qui marche très bien.
- Je lance mon crontab -e, j'édite le fichier avec la commande : 0 2 0 0 0 shutdown -h now dans mon cas – mais la valeur heure/minute n’est pas « intéressante » dans mon cas*
- Et là, à heure/minute voulue ... rien !
- J’essaie touch, mkdir etc etc OK mais shutdown RAS
- Je bidouille un peu et je m'aperçois que la seule facon de faire fonctionner mon « projet » c'est 1/ d'être en root, 2/ de lancer mon crontab -e depuis root, 3/ de passer par sudo 0 2 0 0 0 shutdown -h now...

Ca m’étonne car connecté en tant que user, shutdown -h now ne me demande pas de sudo et marche très bien !

Je sais qu’il existe des programmes qui font cela très bien, mais ce qui m’intéresse c’est de comprendre vraiment pourquoi cela ne fonctionne pas comme cela devrait ou comme je le penserai.

Voilou…

Merci d’avance pour votre aide plus que précieuse, même s’il ne s’agit pas d’un problème « majeur » !

A+

Alex

Hors ligne

#2 Le 16/12/2016, à 23:12

Watael

Re : crontab -e shutdown -h now

salut,

cron ne connait pas le chemin vers shutdown, ajoute-lui son chemin absolu.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 17/12/2016, à 09:53

jplemoine

Re : crontab -e shutdown -h now

Ce qui donne :

 0 2 0 0 0 /sbin/shutdown -h now

Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#4 Le 17/12/2016, à 12:11

alex_gaz

Re : crontab -e shutdown -h now

J'ai essayé... RAS; je suis passé par

poweroff 

et RAS aussi...

Hors ligne

#5 Le 18/12/2016, à 09:31

bruno

Re : crontab -e shutdown -h now

Bonjour,

Pour faire simple, avec systemd et polkit les utilisateurs connectés à une session locale peuvent se servir des commandes d'arrêt ou de mise en veille sans avoir besoin d'acquérir les privilèges administrateur (root).
C'est polkit qui permet à un utilisateur standard d'accomplir quelques tâches indispensables sans être root : gérer arrêt et mise en veille, connexions réseau etc.

ex (équivalent de shutdown) :

systemctl poweroff

Si l’utilisateur est connecté à une session distante (cas d'une connexion SSH) ou s'il  n'a pas déjà une session ouverte (cas d'une tâche cron) il ne peut pas utiliser ces commandes sans acquérir les droits root.

Pour ce type de tâche qui doit donc être exécuté par root, le plus « propre » est de créer un fichier dans /etc/cron.d contenant :

 0 2 0 0 0 /sbin/shutdown -h now

Dernière modification par bruno (Le 18/12/2016, à 09:33)

Hors ligne

#6 Le 19/12/2016, à 13:33

alex_gaz

Re : crontab -e shutdown -h now

Merci bruno, watael et jplemoine pour votre aide. smile

Je vais investiguer du coté de "systemd" et "polkit" que je ne connaissais pas.

Le dernier test effectué hier soir a effectivement consisté à créer un fichier dans " /etc/cron.d" mais là aussi ...  silence radio de mon PC

Je poursuis mes recherches!

Hors ligne

#7 Le 19/12/2016, à 20:04

bruno

Re : crontab -e shutdown -h now

Normalement le fichier dans /etc/cron.d devrait fonctionner, pour une exécution tous les jours à 2 heures (j'ai bêtement recopié les 0 dans mon message précédent…):

00 2 * * * /sbin/shutdown -h now

Dernière modification par bruno (Le 19/12/2016, à 20:04)

Hors ligne

#8 Le 20/12/2016, à 13:55

alex_gaz

Re : crontab -e shutdown -h now

J'ai pourtant mis à jours les 2 fichiers (en sudo) et ca ne marche pas. J'ai creusé sur le net et je n'ai pas trouvé grand chose, à part des logiciels qui effectuent cette tache.

Étonnant que je sois le seul à poser cette question, et étonnant que partant d'un énoncé aussi simple la réponse soit aussi "compliquée" (pour un noob bien sur smile ).

Merci pour ton aide en tout cas, ci dessous mon code. Peut-être que ca vient de moi...

alex@alex-ThinkPad-T420:/etc/cron.d$ ls -a
.  ..  anacron  .placeholder  popularity-contest  test
alex@alex-ThinkPad-T420:/etc/cron.d$ cat .placeholder 
# DO NOT EDIT OR REMOVE
# This file is a simple placeholder to keep dpkg from removing this directory
alex@alex-ThinkPad-T420:/etc/cron.d$ cat anacron 
# /etc/cron.d/anacron: crontab entries for the anacron package

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

30 7    * * *   root	test -x /etc/init.d/anacron && /usr/sbin/invoke-rc.d anacron start >/dev/null
35 13 * * * /sbin/shutdown -h now
alex@alex-ThinkPad-T420:/etc/cron.d$ cat popularity-contest 
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
15 1 * * *   root    test -x /etc/cron.daily/popularity-contest && /etc/cron.daily/popularity-contest --crond
37 13 * * * /sbin/shutdown -h now

Hors ligne

#9 Le 20/12/2016, à 14:32

bruno

Re : crontab -e shutdown -h now

Tu n'aurais pas du modifier les fichiers déjà présents dans /etc/cron.d/ mais en créer un nouveau. Par exemple /etc/crond.d/shutdown

sudo nano /etc/cron.d/shutdown

Avec ce contenu :

30 15 * * *  root /sbin/shutdown -h now

par exemple pour exécuter la commande à 15h30
en oubliant pas de relancer le service cron après avoir enregistré ce fichier :

sudo service cron restart

Dernière modification par bruno (Le 20/12/2016, à 14:33)

Hors ligne

#10 Le 21/12/2016, à 00:29

alex_gaz

Re : crontab -e shutdown -h now

C'est bon ca marche! j'ai fait la manipulation à la lettre et ca marche.

En bidouillant un peu je me suis apercu de 2 choses :
- Pas besoin de créer un nouveau fichier, rajouter la commande à la fin d'un fichier existant déjà dans le répertoire, ca marche aussi. Je suppose qu'il faut éviter de modifier ces fichier (?).

- Pas besoin de

sudo service cron restart

, ca marche aussi.

Une dernière question toutefois, j'ai essayé en mode root crontab -e pour rajouter notre commande

30 15 * * *  root /sbin/shutdown -h now

. et bien sur cela ne fonctionne pas.

Pourquoi?
Qu'est que les fichiers /etc/cron.d savent faire et pas crontab ?

Encore merci pour ton aide. J'ai encore beaucoup questions mais je vais m’arrêter là sur ce topic!

PS J'ai parcouru "De la bonne manière de poser les questions", très utile pour la suite...

Merci encore

a+

Alex

Hors ligne

#11 Le 21/12/2016, à 10:05

bruno

Re : crontab -e shutdown -h now

Il ne faut éviter de modifier les fichiers existant car ils ont été placé là à l'installation d'un paquet. En l'occurrence anacron et popularity-contest. Lors d'une mise à jour de ces paquets les fichiers risquent d'être remplacés et tu perdrais ta configuration. Et même si ce n'est pas le cas il est préférable d'avoir une fichier de configuration différent pou chaque application pour des questions d'organisation et de logique. Te rappelleras-tu dans 6 mois ou dans un an que tu as placé ce bout de code dans ce fichier ?

Le redémarrage du service c'était par précaution pour être sûr que ton nouveau fichier soit bien pris en compte mais effectivement ce n'était pas indispensable.


La commande crontab -e permet de modifier le fichier crontab de l'utilisateur courant. Dans le cas du crontab d'un utilisateur la commande invoquée est exécutée par cet utilisateur, on ne précise donc pas l'utilisateur et la ligne devient juste :

30 15 * * *  /sbin/shutdown -h now

Les fichiers crontab des utilisateurs se trouvent dans /var/spool/cron/crontabs. Dans ton ca cela ne pouvait fonctionner que si tu exécutait crontab -e en tan que root.

Pour les crontab système (/etc/crontab et /etc/cron.d/*), l'utilisateur doit être précisé (c'est pour cela que la ligne donnée au début ne marchait pas).

Tout ceci est expliqué dans man crontab et man 5 crontab.

Pour mon lien en signature, tu dois être l'un des rares à avoir été le consulter wink Mais de toute façon tu avais commencé la discussion en expliquant ce que tu voulais faire, ce que tu avais essayé et ce qui ne fonctionnait pas. Nous avions donc partiquement tous les éléments pour te répondre, me si nous avons un peu cafouillé dans nos réponses wink

Hors ligne

#12 Le 21/12/2016, à 10:17

kholo

Re : crontab -e shutdown -h now

salut,
comme c'est toujours bon à savoir
je met ici les commandes par dbus (PAS de sudo !)
Arrêt du système :

dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 "org.freedesktop.login1.Manager.PowerOff" boolean:true

Reboot :

dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 "org.freedesktop.login1.Manager.Reboot" boolean:true

Mise en veille :

dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 "org.freedesktop.login1.Manager.Suspend" boolean:true

Hibernation :

dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 "org.freedesktop.login1.Manager.Hibernate" boolean:true

Hors ligne

#13 Le 21/12/2016, à 10:40

bruno

Re : crontab -e shutdown -h now

Intéressant mais pas facile à mémoriser wink Et je ne suis pas sûr que cela marche sans environnement de bureau installé…

Avec systemd sans utiliser sudo:

Arrêt :

systemctl poweroff

Reboot

systemctl reboot

Veille

systemctl suspend

Hibernation

systemctl hibernate

Hors ligne

#14 Le 21/12/2016, à 10:55

kholo

Re : crontab -e shutdown -h now

@bruno : oui ça fait long avec dbus, ce pourquoi je le met à droite à gauche sur le forum pour le "démocratiser" un peu
pour l'interface graphique, il n'est pas précisé que nous ne sommes pas sans bureau...
...et, bien cool systemctl... faut que je m'y mette

Hors ligne