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 29/08/2023, à 12:12

L'Africain

(Résolu) Arrêt et démarrage automatique du serveur

Bonjour,
J'ai un serveur local, que je souhaiterais arrêter et démarrer automatiquement tous les jours. J'ai trouvé une solution ici
Lorsque je fais les commandes séparément ça fonctionne bien. mais pas le script. J'imagine que c'est du au fait que je n'emploie pas sudo?
quand j'essaye d'exécuter le script manuellement, j'ai cette erreur:

sh: 1: cannot create /sys/class/rtc/rtc0/wakealarm: Permission denied
sh: 1: cannot create /sys/class/rtc/rtc0/wakealarm: Permission denied
/usr/local/bin/shutwake: ligne 4: shutdown : commande introuvable

Comment faire comprendre à cron que c'est en sudo qu'il doit exécuter cette commande?
Contenu de mon fichier /usr/local/bin/shutwake:

#!/bin/bash 
sh -c "echo 0 > /sys/class/rtc/rtc0/wakealarm" 
sh -c "echo `date '+%s' -d '+ 600 minutes'` > /sys/class/rtc/rtc0/wakealarm" 
shutdown -h now

Contenu de mon cron:

sudo crontab -e
00 21   *   *   *    /usr/local/bin/shutwake

J'ai bien mis les droits d'exécution à root sur le fichier et j'ai aussi root comme propriétaire même si je sais pas si c'est une bonne chose.
Merci de votre aide

Dernière modification par L'Africain (Le 31/08/2023, à 21:07)


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#2 Le 31/08/2023, à 00:40

gribouille28

Re : (Résolu) Arrêt et démarrage automatique du serveur

Bonjour

L''Africain a écrit :

Comment faire comprendre à cron que c'est en sudo qu'il doit exécuter cette commande?

Tu peux créer un fichier dans sudoers.d
La ligne a mettre dans ton fichier

utilisateur ALL = (ALL) NOPASSWD: /chemin/complet/commande

Et le script se lancera sans chercher de mot de passe
La commande visudo détecte toute erreur dans le fichier que tu va creer attention de respecter si il y a refus d'enregistrer sous peine de corrompre ton sudoers et de ne plus pouvoir taper aucune commande sudo ....donc si visudo signal une anomalie il faut impérativement retourner corriger la ligne que tu aurra rentré avant d'enregistrer ton fichier.

Hors ligne

#3 Le 31/08/2023, à 00:48

Watael

Re : (Résolu) Arrêt et démarrage automatique du serveur

pourquoi ne pas simplement inscrire le script dans la crontab de root ?
et rédiger le script en tant que root aussi, puisque tu as la main en tant que root sur le serveur ! ça évitera les sous-shell sh


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

Hors ligne

#4 Le 31/08/2023, à 03:08

Watael

Re : (Résolu) Arrêt et démarrage automatique du serveur

deux remaques supplémentaires, L'Africain :
pourquoi initialiser /sys/class/rtc/rtc0/wakealarm à 0 avant de l'écraser avec une date ?
pourquoi faire un echo au lieu de n'utiliser que date ?


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

Hors ligne

#5 Le 31/08/2023, à 03:50

nany

Re : (Résolu) Arrêt et démarrage automatique du serveur

Bonjour,



Watael a écrit :

pourquoi ne pas simplement inscrire le script dans la crontab de root ?

C’est ce que L'Africain semble avoir fait.

L'Africain a écrit :
sudo crontab -e
Watael a écrit :

et rédiger le script en tant que root aussi, puisque tu as la main en tant que root sur le serveur ! ça évitera les sous-shell sh

Les sous-shell sont donc en effet inutile.

Watael a écrit :

deux remaques supplémentaires, L'Africain :
pourquoi initialiser /sys/class/rtc/rtc0/wakealarm à 0 avant de l'écraser avec une date ?
pourquoi faire un echo au lieu de n'utiliser que date ?

Je me suis posé les mêmes questions.
L’echo de date est en effet inutile et je ne comprends pas pourquoi il faut initialiser à zéro pour ensuite assigner une autre valeur.

Mais bon, il a suivi scrupuleusement le tuto, on ne peut donc pas lui en vouloir.

En revanche, ce qui est plus surprenant, c’est

L'Africain a écrit :
/usr/local/bin/shutwake: ligne 4: shutdown : commande introuvable

Alors soit il faut indiquer le chemin de shutdown (problème de PATH ?), soit la commande n’est pas installée et c’est vraiment très bizarre.



Au vu de toutes ces remarques, je propose donc le script corrigé (dans le doute, je garde l’initialisation à zéro) :

#!/bin/bash
echo 0 > /sys/class/rtc/rtc0/wakealarm
date '+%s' -d '+ 600 minutes' > /sys/class/rtc/rtc0/wakealarm
/usr/sbin/shutdown -h now

Si le crontab a bien été édité en sudo, pas la peine d’y toucher.

Hors ligne

#6 Le 31/08/2023, à 16:55

Watael

Re : (Résolu) Arrêt et démarrage automatique du serveur

dans le doute, je garde l’initialisation à zéro

n'en voyant pas l'utilité, je la garderais aussi, mais commenté smile , pour observer immédiatement le comportement du script sans.

L'Africain a écrit :

Comment faire comprendre à cron que c'est en sudo qu'il doit exécuter cette commande?

je ne suis pas aller beaucoup plus loin. hmm


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

Hors ligne

#7 Le 31/08/2023, à 17:28

L'Africain

Re : (Résolu) Arrêt et démarrage automatique du serveur

Bonjour à tous pour vos coup de main!
J'ai ajouté la ligne proposée par grigouille à sudoers et ça fonctionne très bien. Tout le reste n'a pas fonctionné. J'ai par contre simplifié le script avec les options de nany.


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#8 Le 31/08/2023, à 17:48

Watael

Re : (Résolu) Arrêt et démarrage automatique du serveur

Tout le reste n'a pas fonctionné.

ce n'est pas normal : il ne devrait pas y avoir de restriction à l'exécution de quelque commande que ce soit via la crontab root. sad

$ cat <<eof>$HOME/shutwake
#!/bin/bash
echo 0 > /sys/class/rtc/rtc0/wakealarm
date '+%s' -d '+ 600 minutes' > /sys/class/rtc/rtc0/wakealarm
/usr/sbin/shutdown -h now
eof
$ chown +x $HOME/shutwake
$ sudo chown root:root  $HOME/shutwake
$ sudo cp $HOME/shutwake /usr/local/bin/
$ sudo sh -c '{ crontab -l; echo "00 21   *   *   *    /usr/local/bin/shutwake";} | crontab'
$

je ne vois pas de raison que ça ne marche pas.

Dernière modification par Watael (Le 31/08/2023, à 20:19)


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

Hors ligne

#9 Le 31/08/2023, à 18:37

MicP

Re : (Résolu) Arrêt et démarrage automatique du serveur

Watael a écrit :

…pourquoi initialiser /sys/class/rtc/rtc0/wakealarm à 0 avant de l'écraser avec une date ? …

Voir : https://lkml.org/lkml/2007/6/19/264

=======
Sur mon ThinkPad T450, si une heure de réveil est déjà programmée et donc pas encore atteinte,
il m'est impossible de programmer une nouvelle heure de réveil
sans avoir au préalable désactivé le réveil en envoyant ce zéro :

root@deb12:~# cat /proc/driver/rtc
rtc_time	: 17:12:34
rtc_date	: 2023-08-31
alrm_time	: 17:18:30
alrm_date	: 2023-08-31
alarm_IRQ	: yes
alrm_pending	: no
update IRQ enabled	: no
periodic IRQ enabled	: no
periodic IRQ frequency	: 1024
max user IRQ frequency	: 64
24hr		: yes
periodic_IRQ	: no
update_IRQ	: no
HPET_emulated	: no
BCD		: yes
DST_enable	: no
periodic_freq	: 1024
batt_status	: okay
root@deb12:~# date '+%s' -d '+ 600 minutes' > /sys/class/rtc/rtc0/wakealarm
date: erreur d'écriture: Périphérique ou ressource occupé
root@deb12:~# echo 0 > /sys/class/rtc/rtc0/wakealarm
root@deb12:~# cat /proc/driver/rtc
rtc_time	: 17:12:52
rtc_date	: 2023-08-31
alrm_time	: 17:17:49
alrm_date	: 2023-08-31
alarm_IRQ	: no
alrm_pending	: no
update IRQ enabled	: no
periodic IRQ enabled	: no
periodic IRQ frequency	: 1024
max user IRQ frequency	: 64
24hr		: yes
periodic_IRQ	: no
update_IRQ	: no
HPET_emulated	: no
BCD		: yes
DST_enable	: no
periodic_freq	: 1024
batt_status	: okay
root@deb12:~# date '+%s' -d '+ 600 minutes' > /sys/class/rtc/rtc0/wakealarm
root@deb12:~# cat /proc/driver/rtc
rtc_time	: 17:12:59
rtc_date	: 2023-08-31
alrm_time	: 03:12:57
alrm_date	: 2023-09-01
alarm_IRQ	: yes
alrm_pending	: no
update IRQ enabled	: no
periodic IRQ enabled	: no
periodic IRQ frequency	: 1024
max user IRQ frequency	: 64
24hr		: yes
periodic_IRQ	: no
update_IRQ	: no
HPET_emulated	: no
BCD		: yes
DST_enable	: no
periodic_freq	: 1024
batt_status	: okay
root@deb12:~# 

En résumé, si

alarm_IRQ	: yes

alors on ne pourra pas faire prendre en compte une heure de réveil par la RTC.
et pour mettre alarm_IRQ à no
il faut envoyer (avec les privilèges du compte root) ce zéro

echo 0 > /sys/class/rtc/rtc0/wakealarm

Note : La RTC est (logiquement) à l'heure UTC

Dernière modification par MicP (Le 31/08/2023, à 19:32)

Hors ligne

#10 Le 31/08/2023, à 20:19

Watael

Re : (Résolu) Arrêt et démarrage automatique du serveur

ok. merci.
je décommente. tongue
smile


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

Hors ligne

#11 Le 01/09/2023, à 00:44

MicP

Re : (Résolu) Arrêt et démarrage automatique du serveur

Dans la crontab, ce qui bloque c'est le caractère % qui est dans la ligne de commandes => il faudra simplement l'échapper.

'man 5 crontab' a écrit :

… Percent-signs (%) in the command, unless escaped with backslash (\), will be changed into newline characters, and all data after the first % will be sent to the command as standard input. …

Donc, pour que ça puisse fonctionner, dans la crontab du compte root
on peut formuler la ligne de commandes comme ci-dessous :

echo 0 > /sys/class/rtc/rtc0/wakealarm && date '+\%s' -d '+ 600 minutes' > /sys/class/rtc/rtc0/wakealarm

ce qui donne :

root@deb12:~# crontab -l
# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command

# Pour tests https://forum.ubuntu-fr.org/viewtopic.php?id=2080881
# Tous les jours à 21:00 la RTC sera programmée pour une remise en route automatique de la machine le lendemain à 07:00
00 21 * * * echo 0 > /sys/class/rtc/rtc0/wakealarm && date '+\%s' -d '+ 600 minutes' > /sys/class/rtc/rtc0/wakealarm

root@deb12:~# 

Dernière modification par MicP (Le 01/09/2023, à 06:46)

Hors ligne