GNU/Linux >> Tutoriels Linux >  >> Linux

utiliser des minuteries systemd au lieu de cron

Une réponse à cette question est d'échanger User=nobody pas avec User=ziga mais avec User=root dans /etc/systemd/system/battery.service . D'une manière ou d'une autre, même si l'utilisateur ziga a tous les privilèges d'utiliser sudo commande qu'il ne peut pas exécuter systemctl hibernate à l'intérieur du script bash. Je ne sais vraiment pas pourquoi cela arrive. Les fichiers de travail sont donc les suivants :

/etc/systemd/system/battery.service

[Unit]
Description=Preko skripte preveri stanje baterije in hibernira v kolikor je stanje prenizko

[Service]
Type=oneshot
ExecStart=/home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescript
User=root
Group=systemd-journal

/etc/systemd/system/battery.timer

[Unit]
Description=Periodical checking of battery status every two minutes

[Timer]
OnBootSec=2min
OnUnitActiveSec=2min 

[Install]
WantedBy=battery.service

/home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescript

#!/bin/sh
/usr/bin/acpi -b | /usr/bin/awk -F'[,:%]' '{print $2, $3}' | (
        read -r status capacity
        if [ "$status" = Discharging ] && [ "$capacity" -lt 7 ]; then
                /usr/bin/systemctl hibernate
        fi
)

Je l'ai essayé et ça marche aussi avec User=ziga ou User=nobody mais nous devons changer /usr/bin/systemctl hibernate en sudo /usr/bin/systemctl hibernate dans le dernier scénario. Il ressemble donc à User la variable n'a même pas d'importance... Oh et vous pouvez aussi supprimer les noms absolus du dernier script et changer la première ligne de #!/bin/sh à #!/bin/bash . J'ai aussi changé WantedBy=timers.target à WantedBy=battery.service dans /etc/systemd/system/battery.timer .

Voilà. La meilleure alternative cron pour hiberner les ordinateurs portables sur batterie faible. =)


Peut-être devriez-vous essayer d'ajouter le premier démarrage après le démarrage, comme ceci :

[Timer] OnBootSec=15min OnUnitActiveSec=2m


Linux
  1. Comment changer les niveaux d'exécution/cibles à l'aide de systemd dans Ubuntu

  2. Comment mettre en place une tâche cron pour lancer un exécutable toutes les heures ?

  3. @reboot ne fonctionne pas dans CRON

  4. Quand dois-je utiliser /dev/shm/ et quand dois-je utiliser /tmp/?

  5. Différence entre /etc/hosts et /etc/resolv.conf

Utiliser les fonctionnalités de systemd pour sécuriser les services

Les variables d'environnement dans /etc/environment ne sont pas globalement visibles ?

Linux - Comment définir l'affinité CPU par défaut pour tous les démons dans Systemd ?

SystemD - A quoi sert SystemD ?

Comment savoir si j'utilise systemd sous Linux ?

Comment savoir si un système utilise SysV, Upstart ou Systemd initsystem