RISOLTO Killare un processo ad una certa ora

Pubblicità

Edmund Blackadder

Utente Attivo
Messaggi
327
Reazioni
171
Punteggio
41
Salve, ho la necessità di killare un processo ad una certa ora. La vittima in questione è swayidle. In pratica vorrei che la sera lo schermo del computer rimanesse sempre acceso. Ho già provato at ma quando l'ho messo nella configurazione di Sway in autostart ho sperimentato vari crash per ragioni a me sconosciute. Suggerimenti?
 
Soluzione
Riesumo il post perché ho trovato un modo molto pulito per killare un certo processo. Come ha suggerito @Moffetta88 useremo i Cron, in particolare i timer di systemd che sono un'alternativa ai Cron veri e propri.

Il prerequisto fondamentale è che il processo in questione sia avviato tramite systemd. Ad esempio questo è il service per avviare swayidle:
Codice:
[Unit]
Description=Idle manager for Wayland
Documentation=man:swayidle(1)
PartOf=graphical-session.target

[Service]
Type=simple
ExecStart=/usr/bin/swayidle -w \
            timeout 1800 'swaymsg "output * dpms off"' \
            timeout 2700 'swaylock -f -i ~/Immagini/sfondo.png --font-size 18' \
            resume 'swaymsg "output * dpms on"'

[Install]
WantedBy=sway-session.target

I...
Salve, ho la necessità di killare un processo ad una certa ora. La vittima in questione è swayidle. In pratica vorrei che la sera lo schermo del computer rimanesse sempre acceso. Ho già provato at ma quando l'ho messo nella configurazione di Sway in autostart ho sperimentato vari crash per ragioni a me sconosciute. Suggerimenti?
Puoi semplicemente andare nelle impostazioni di risparmio energetico e mettere su mai la disattivazione del monitor, stessa cosa con la sospensione
 
Puoi semplicemente andare nelle impostazioni di risparmio energetico e mettere su mai la disattivazione del monitor, stessa cosa con la sospensione
Sway è solo un window manager, quindi non ha "impostazioni".

un cronjob con un semplice sh per il kill del processo??
L'ho preso in considerazione ma speravo ci fosse qualcosa di più semplice. Ad esempio avevo pensato ad una funzione bash così:
Codice:
tempo = 21:00 - ora_attuale;
timeout tempo pkill swayidle
Se è una badpractice usare timeout così allora vado di Cron.
 
Riesumo il post perché ho trovato un modo molto pulito per killare un certo processo. Come ha suggerito @Moffetta88 useremo i Cron, in particolare i timer di systemd che sono un'alternativa ai Cron veri e propri.

Il prerequisto fondamentale è che il processo in questione sia avviato tramite systemd. Ad esempio questo è il service per avviare swayidle:
Codice:
[Unit]
Description=Idle manager for Wayland
Documentation=man:swayidle(1)
PartOf=graphical-session.target

[Service]
Type=simple
ExecStart=/usr/bin/swayidle -w \
            timeout 1800 'swaymsg "output * dpms off"' \
            timeout 2700 'swaylock -f -i ~/Immagini/sfondo.png --font-size 18' \
            resume 'swaymsg "output * dpms on"'

[Install]
WantedBy=sway-session.target

I servizi che girano senza permessi di root vanno messi in : ~/.config/systemd/user. Dopo che il nostro servizio è stato abilitato e avviato con successo possiamo stopparlo tramite un timer. Il timer vuole due cose:
  • Un'unità servizio da avviare (che chiameremo wakener.service).
  • Un'unità timer da schedulare (che chiameremo wakener.timer).
La nostra unità servizio (wakener.service) da avviare sarà:
Codice:
[Unit]
Description=Service to stop swayidle

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl --user stop swayidle.service

[Install]
WantedBy=sway-session.target

È molto semplice, un normale servizio che stoppa un altro servizio. Infine l'unità timer (wakener.timer) sarà il componente che avvierà il nostro servizio in un dato momento. Nel mio caso il wakener.service viene avviato ogni sera alle 21:00:
Codice:
[Unit]
Description=Timer to stop swayidle

[Timer]
OnCalendar=*-*-* 21:00:00

[Install]
WantedBy=timers.target

Tutto ciò che rimane da fare è abilitare il timer e controllare che tutto sia a posto:
Bash:
systemctl --user enable --now wakener.timer
systemctl --user list-timers --all

Questa è una soluzione casalinga che mi sono inventato, magari in giro ci sono modi migliori per fare il tutto quindi non prendetelo come oro colato ma sembra comunque un modo migliore di usare pkill o killall.

P.S. Alcuni WantedBy che vedete sono necessari per far funzionare il servizio con Sway, se non utilizzate Sway dovrete ovviamente cambiarli.
 
Soluzione
Pubblicità
Pubblicità
Indietro
Top