GNU/Linux >> Belajar Linux >  >> Linux

Jalankan perintah saat sistem dalam keadaan diam dan saat aktif kembali

Utas ini di forum ArchLinux berisi program C pendek yang menanyakan xscreensaver untuk informasi berapa lama pengguna telah menganggur, ini tampaknya cukup dekat dengan kebutuhan Anda:

#include <X11/extensions/scrnsaver.h>
#include <stdio.h>

int main(void) {
    Display *dpy = XOpenDisplay(NULL);

    if (!dpy) {
        return(1);
    }

    XScreenSaverInfo *info = XScreenSaverAllocInfo();
    XScreenSaverQueryInfo(dpy, DefaultRootWindow(dpy), info);
    printf("%u\n", info->idle);

      return(0);
}

Simpan ini sebagai getIdle.c dan kompilasi dengan

gcc -o getIdle getIdle.c -lXss -lX11

untuk mendapatkan file yang dapat dieksekusi getIdle . Program ini mencetak "waktu diam" (pengguna tidak bergerak/mengklik dengan mouse, tidak menggunakan keyboard) dalam milidetik, sehingga skrip bash yang dibuat berdasarkan ini dapat terlihat seperti ini:

#!/bin/bash

idle=false
idleAfter=3000     # consider idle after 3000 ms

while true; do
  idleTimeMillis=$(./getIdle)
  echo $idleTimeMillis  # just for debug purposes.
  if [[ $idle = false && $idleTimeMillis -gt $idleAfter ]] ; then
    echo "start idle"   # or whatever command(s) you want to run...
    idle=true
  fi

  if [[ $idle = true && $idleTimeMillis -lt $idleAfter ]] ; then
    echo "end idle"     # same here.
    idle=false
  fi
  sleep 1      # polling interval

done

Ini masih membutuhkan polling reguler, tetapi melakukan semua yang Anda butuhkan...


TMOUT di bash akan menghentikan sesi interaktif setelah jumlah detik yang ditentukan. Anda dapat menggunakan mekanisme itu.

Anda mungkin menangkap logout dengan menyetel jebakan yang sesuai (saya tidak mengujinya), atau dengan menggunakan skrip bash-logout (~/.bash_logout).

Ini adalah jawaban pengguna super yang bagus ke arah itu.


Ini tidak seperti yang Anda minta, tetapi selalu ada batch -command (biasanya doa khusus dari at -command dan menggunakan atd -daemon).

batch memungkinkan Anda memberi isyarat perintah untuk dijalankan ketika rata-rata beban turun di bawah batas tertentu (biasanya 1,5, tetapi ini dapat diatur saat memulai atd ). Dengan at itu juga memungkinkan untuk memberi isyarat pekerjaan sedemikian rupa daripada dijalankan pada waktu tertentu; pekerjaan baru saja dikirim ke batch pada saat itu, dan dijalankan pertama kali saat rata-rata beban turun (misalnya, dijalankan segera setelah rata-rata beban turun di bawah 1,5 beberapa saat setelah pukul 02.00).

Sayangnya pekerjaan batch kemudian akan berjalan sampai akhir, itu tidak akan berhenti jika komputer tidak lagi menganggur.

+++

Jika Anda harus pergi ke rute pemrograman (yang terlihat seperti dari jawaban lain), saya rasa saya akan mencoba membuat sesuatu yang mirip dengan atd atau crond daemon, yang memantau pengguna yang masuk dan/atau rata-rata beban. Daemon ini kemudian dapat menjalankan skrip/program dari direktori tertentu, dan memulai/melanjutkan atau menghentikannya (dengan sinyal) sesuai kebutuhan.


Linux
  1. Apa Yang Terjadi Saat Saya Menjalankan Perintah Cat /proc/cpuinfo?

  2. Cara Menulis dan Menjalankan Program Qt pertama Anda di Debian 10

  3. 7 Contoh Perintah Tanggal Linux untuk Menampilkan dan Mengatur Waktu Tanggal Sistem

  1. Menggunakan perintah timedatectl untuk mengubah waktu dan tanggal pada sistem Linux RHEL7

  2. 10 Penggunaan Simbol atau Operator (!) yang Menakjubkan dan Misterius di Perintah Linux

  3. Penjadwalan di Linux:jalankan tugas saat komputer dalam keadaan diam (=tidak ada input pengguna)

  1. Bagaimana Menjalankan Perintah Sebagai Administrator Sistem (root)?

  2. Bagaimana Cara Menjalankan Perintah Saat Konten Direktori Diperbarui?

  3. Ssh Ke Beberapa Host Dan Jalankan Perintah?