Wie führe ich ein Bash-Skript nach 20 Sekunden bei der Anmeldung aus?

8

Ich möchte ein Bash-Skript ausführen wie:

#!/bin/bash          
echo 'cpu limit bomi player at 40%'
cpulimit -v -e bomi -l 40  

Nur 20 Sekunden nach der Anmeldung bei meinem Benutzer. Können Sie mir bitte dabei helfen? Ich habe Google durchsucht und getan, was sie gesagt haben, aber es hat bei mir nicht funktioniert.

Wenn das Bash-Skript in einem neuen Terminalfenster ausgeführt werden kann, in dem die Ausgabe angezeigt wird, teilen Sie mir bitte mit, was ich tun muss, um dies zu erreichen.

Mahdi
quelle
1
Müssen Sie das für Ihren Benutzer oder global für das gesamte System ausführen? Die von mir bereitgestellte Lösung wird als root ausgeführt, wenn Sie möchten, dass Ihr Benutzer derjenige ist, der die Befehle ausführt, und die Zeilen danach sleepmit ändern su -c user '<command>'.
Bruno Pereira
auf dem ganzen System .wenn es erfolgreich war, wie kann ich herausfinden, dass es erfolgreich war? kommt ein Terminal hoch?
Mahdi
Warum die Verzögerung? Wenn Sie darauf warten möchten, dass abhängige Dienste bereits gestartet wurden, ist das Einfügen einer Verzögerung eine schlechte Problemumgehung. Wenn dies der Fall ist, sollten Sie sich fragen, wie Sie warten sollen, bis diese Dienste fertig sind, anstatt auf eine bestimmte Dauer zu warten.
Kasperd
Nun, ich denke, Verzögerung ist ein kurzer Weg zu gehen
Mahdi
1
@ Mahdi dann sollte die vorgeschlagene Lösung funktionieren :) Entschuldigung.
Bruno Pereira

Antworten:

11

Eine einfache Möglichkeit, dies zu tun, besteht darin, diese Zeilen zu rc.local in Ihrem System hinzuzufügen.

Dafür benötigen Sie Root- oder Sudo-Rechte. Sie können die Datei mit Ihrem bevorzugten Texteditor bearbeiten, z. B. vim :

vim /etc/rc.local

(sleep 20
echo 'cpu limit bomi player at 40%'
cpulimit -v -e bomi -l 40) &

Die erste Zeile weist den Computer an, 20 Sekunden zu warten, die anderen 2 Zeilen stammen aus Ihrem Skript und die letzte Zeile &weist den Computer an, diese in einer Sub-Shell auszuführen, damit Ihr Computer nicht auf das Ende der Funktion wartet und fortfährt mit boot.

Sie sollten diese Zeilen an einer beliebigen Stelle vor dem exit 0Aufruf am Ende dieses Skripts hinzufügen , da es dann beendet wird und alle Zeilen danach ignoriert werden.

Bruno Pereira
quelle
Vielen Dank. Ich habe das gestern getan, aber es hat bei mir nicht funktioniert, und 20 Sekunden meine ich, dass das Ubuntu-Bootup und die Programme gut laufen, dann läuft mein Skript run.tnx inadv
Mahdi
Ich denke, es liegt daran, dass Sie das als Ihr Benutzer und nicht als Root ausführen sollen. su user -c <command>sollte das beheben.
Bruno Pereira
Das Einwickeln der Befehle ()&und das Verwenden eines sleepBefehls ist der richtige Weg, um eine solche Verzögerung einzuführen. Ich würde jedoch erwähnen, dass die Verwendung rc.localnur eine von mehreren Möglichkeiten ist, dies zu tun. Eine andere Möglichkeit besteht darin, ein Dienstskript zu schreiben, das dann nach Bedarf vor oder nach anderen Diensten abgelegt werden kann. Es ist auch möglich, @rebootin einem Crontab zu verwenden.
Kasperd
öffnet es ein neues Terminal, das die Ausgabe des Skripts anzeigt?
Mahdi
Ich denke, dass das OP "boot" mit "login in your desktop" verwechselt. Siehe askubuntu.com/a/419185/16395
Rmano
0

Sie können dies auch im Terminal eingeben:

crontab -e

und geben Sie dies ein:

@reboot /path/to/script

und geben Sie im Skript am Anfang Folgendes ein:

sleep 20

und es könnte auf diese Weise gut funktionieren.

Michael
quelle
1
-1 Login wird nicht neu gestartet!
AB
0

Ein weiterer Vorschlag ist das Erstellen eines ausführbaren Bash-Skripts. Nennen wir es onboot.sh und speichern es in Ihrem Home-Verzeichnis

~ / onboot.sh

#!/bin/bash
sleep 20      
echo 'cpu limit bomi player at 40%'
cpulimit -v -e bomi -l 40  

Machen Sie es dann ausführbar, indem Sie diesen Befehl ausführen

chmod +x ~/onboot.sh

Fügen Sie dann diese Zeile zu Ihrem ~ / .bashrc hinzu

~/onboot.sh &

Jedes Mal, wenn Sie eine neue Terminalsitzung erstellen, wird diese ausgeführt ~/.bashrc, und dann wird Ihre ~/onboot.shDatei ausgeführt.

BEARBEITEN: Ich habe vergessen zu erwähnen, dass dies nur für diesen bestimmten Benutzer ausgeführt wird. Nicht für alle Benutzer im System.

Rowan Hughes
quelle
2
Dies ist eine sehr schlechte Idee. Der Benutzer muss 20 Sekunden warten, egal was passiert. Siehe Brunos Antwort , um zu erfahren , wie dies getan werden kann.
heemayl
Bedeutet das: Jedes Mal, wenn ich ein neues Terminal öffne, wird dieses Skript ausgeführt? Können wir diese Methode nur zum ersten Mal verwenden, wenn wir ein neues Terminal öffnen? (Ich meine, nicht an jedem neuen Terminal arbeiten, nur zum ersten Mal)
Mahdi
Das Skript führt dazu, dass Sie 20 Sekunden warten müssen. Durch einfaches Hinzufügen von '&' in .bashrc wird es im Hintergrund ausgeführt. (Ich ging voran und bearbeitete meine Antwort). Abgesehen davon denke ich, dass dies immer noch eine brauchbare Antwort ist
Rowan Hughes
@ Mahdi Ja, dies wird jedes Mal ausgeführt, wenn Sie eine neue Terminalsitzung öffnen. Wäre das ein Problem?
Rowan Hughes
Ja, ich möchte es nur 1 Mal während der gesamten Zeit ausführen, wenn das System ausgeführt wird
Mahdi