Benötigen Sie Hilfe bei der Bash-Überprüfung, wenn die Computer-Betriebszeit länger als 5 Minuten ist?

7

Ich habe ein Bash-Skript, das auf jeder Minute Cron läuft. Es prüft, ob ein erforderliches Programm ausgeführt wird, und startet es, wenn dies nicht der Fall ist. Gelegentlich wird es ausgeführt, bevor sich der Benutzer tatsächlich angemeldet hat. Ich möchte verhindern, dass dies geschieht.

Ich denke, ich möchte die Verfügbarkeit des Computers überprüfen und prüfen, ob sie 5 Minuten lang eingeschaltet war, damit die automatische Anmeldung beendet werden konnte, bevor das Programm gestartet wird. Ich bin ziemlich neu darin, zu verprügeln und zu analysieren, was ich von "Betriebszeit" bis zu dem Ort bekomme, an dem ich es zum Vergleich verwenden könnte, scheint außerhalb meiner Reichweite zu liegen.

Kann jemand helfen? Vielleicht gibt es eine bessere Lösung. Ich stecke fest.

tollwütiges Faultier
quelle

Antworten:

14

Ein Bash-Skript / Cron-Job ist die falsche Lösung für das Problem, das Sie lösen möchten. Scratch that - zwei Bash-Skripte / Cron-Jobs sind die falsche Lösung für Ihr Problem. ;)

Das Problem, das Sie lösen möchten, lautet: "Stellen Sie sicher, dass eine Aufgabe ausgeführt wird, nachdem sich ein Benutzer angemeldet hat, und stellen Sie sicher, dass sie weiterhin ausgeführt wird." Dies ist ein Job für Emporkömmlinge.

Das Folgende sollte tun, was Sie wollen, und es geht in / etc / init /. Nennen Sie die Datei so etwas wie user-session-job.conf.

description "Keep my very important program running"

start on desktop-session-start
stop on desktop-shutdown

respawn

script
    /path/to/my/very/important/program
end script

Weitere Hilfe finden Sie im Upstart-Kochbuch: http://upstart.ubuntu.com/cookbook/

Achiang
quelle
Danke vielmals. Es gibt einfach so viele "meist richtige" Möglichkeiten, Dinge unter Linux zu tun. Es ist großartig, wenn Sie den "richtigen" finden.
Rabid.sloth
3

Da ich das Skript drastisch gegenüber dem Original ändern musste, habe ich beschlossen, dies als separate Antwort zu veröffentlichen. Ich bin nicht sicher, warum der obige Code nicht funktioniert. Ich entschuldige mich, ich hätte es testen sollen, bevor ich es poste. Ich habe überprüft, dass der folgende Code jedoch tatsächlich funktioniert.

#!/bin/bash

upSeconds="$(cat /proc/uptime | grep -o '^[0-9]\+')"
upMins=$((${upSeconds} / 60))

if [ "${upMins}" -gt "5" ]
then
    echo "Up for ${upMins} minutes"
else
    echo "Up five minutes or less"
fi
Drew Chapin
quelle
Vielen Dank! Das ist relativ ähnlich zu dem, was ich gemacht habe! Ich werde meine Lösung in Kürze veröffentlichen!
Rabid.sloth
1

Versuche dies

#!/bin/bash
#
#   upt - show just the system uptime, days, hours, and minutes

let upSeconds="$(cat /proc/uptime) && echo ${temp%%.*})"
let secs=$((${upSeconds}%60))
let mins=$((${upSeconds}/60%60))
let hours=$((${upSeconds}/3600%24))
let days=$((${upSeconds}/86400))
if [ "${days}" -ne "0" ]
then
   echo -n "${days}d"
fi
echo -n "${hours}h${mins}m"
Drew Chapin
quelle
1
Ich erhalte diesen Fehler: [bearbeiten, leider falscher Link, behoben] pastebin.com/qVUXpeBC
Matt
Stört es Sie, eine Erklärung des Drehbuchs beizufügen?
NN
Dieses Skript wurde über den Link direkt über dem Code kopiert und eingefügt. Auf dieser Seite finden Sie eine Erläuterung des Codes.
Drew Chapin
1

Das würde reichen:

test $(cut -d '.' -f1 /proc/uptime) -gt 300

Skriptbeispiel:

if test $(cut -d '.' -f1 /proc/uptime) -gt 300; then
  echo "booted more than 5 minutes ago"
else
  echo "too early"
fi
VasyaNovikov
quelle