RISOLTO Killare un processo ad una certa ora

Edmund Blackadder

Utente Attivo
192
101
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?
 

Moffetta88

Moderatore
Staff Forum
8,767
5,897
CPU
i5-4690
Dissipatore
DEEPCOOL CAPTAIN 240EX
Scheda Madre
MSI Z97 U3 PLUS
Hard Disk
KINGSTON SSD KC400 240GB
RAM
24GB BALLISTIX SPORT @2133MHz
Scheda Video
STRIX GTX980 DC2OC
Scheda Audio
INTEGRATA
Monitor
AOC G2590VXQ
Alimentatore
BEQUIET! System Power 7 500W
Case
DEEPCOOL MATREXX 55
Periferiche
NESSUNA
Internet
FTTC FASTWEB
Sistema Operativo
UBUNTU/WINDOWS10
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
Reactions: Edmund Blackadder

Moffetta88

Moderatore
Staff Forum
8,767
5,897
CPU
i5-4690
Dissipatore
DEEPCOOL CAPTAIN 240EX
Scheda Madre
MSI Z97 U3 PLUS
Hard Disk
KINGSTON SSD KC400 240GB
RAM
24GB BALLISTIX SPORT @2133MHz
Scheda Video
STRIX GTX980 DC2OC
Scheda Audio
INTEGRATA
Monitor
AOC G2590VXQ
Alimentatore
BEQUIET! System Power 7 500W
Case
DEEPCOOL MATREXX 55
Periferiche
NESSUNA
Internet
FTTC FASTWEB
Sistema Operativo
UBUNTU/WINDOWS10
un cronjob con un semplice sh per il kill del processo??
 
  • Mi piace
Reactions: Edmund Blackadder

Nickname11

Utente Attivo
190
22
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
192
101
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.
 

Edmund Blackadder

Utente Attivo
192
101
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
Reactions: Moffetta88

Entra

oppure Accedi utilizzando

Discussioni Simili