RISOLTO Killare un processo ad una certa ora

Edmund Blackadder

Utente Attivo
327
171
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...

Moffetta88

Moderatore
Staff Forum
Utente Èlite
20,543
12,932
CPU
i5-4690
Dissipatore
DEEPCOOL CAPTAIN 240EX
Scheda Madre
MSI Z97 U3 PLUS
HDD
KINGSTON SSD KC400 240GB
RAM
24GB BALLISTIX SPORT @2133MHz
GPU
STRIX GTX980 DC2OC
Audio
INTEGRATA
Monitor
AOC G2590VXQ
PSU
BEQUIET! System Power 7 500W
Case
DEEPCOOL MATREXX 55
Periferiche
NESSUNA
Net
EOLO 100
OS
UBUNTU/WINDOWS11
un cronjob con un semplice sh per il kill del processo??
 
  • Mi piace
Reazioni: Edmund Blackadder

Nickname11

Utente Attivo
317
38
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
 

Edmund Blackadder

Utente Attivo
327
171
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.
 

Moffetta88

Moderatore
Staff Forum
Utente Èlite
20,543
12,932
CPU
i5-4690
Dissipatore
DEEPCOOL CAPTAIN 240EX
Scheda Madre
MSI Z97 U3 PLUS
HDD
KINGSTON SSD KC400 240GB
RAM
24GB BALLISTIX SPORT @2133MHz
GPU
STRIX GTX980 DC2OC
Audio
INTEGRATA
Monitor
AOC G2590VXQ
PSU
BEQUIET! System Power 7 500W
Case
DEEPCOOL MATREXX 55
Periferiche
NESSUNA
Net
EOLO 100
OS
UBUNTU/WINDOWS11
io sinceramente per qualsiasi cosa "temporizzata" preferisco i cron; dai backup a semplici script di manutenzione programmata non mi ha dato mai noie :brindiamo:
 
  • Mi piace
Reazioni: Edmund Blackadder

Edmund Blackadder

Utente Attivo
327
171
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.
 
  • Mi piace
Reazioni: Moffetta88
Soluzione

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!