Πώς να εκτελέσετε σενάρια και εντολές για αναστολή και συνέχιση στο Linux

Ο καλύτερος τρόπος για να εκτελέσετε σενάρια και εντολές για αναστολή και συνέχιση στο Linux πριν την αναστολή (ή μετά τη συνέχιση) είναι να χρησιμοποιήσετε το σύστημα systemd init. Αυτό οφείλεται στο γεγονός ότι το σύστημα init αλληλεπιδρά άμεσα με τον πυρήνα και τα συστήματα ισχύος. Η εκμάθηση της εργασίας με αυτό το εργαλείο θα επιτρέψει σε κάθε χρήστη να αποκτήσει μεγάλο έλεγχο του λειτουργικού του συστήματος Linux,

Κατανοήστε ότι το να μπλέξετε με το σύστημα init στον υπολογιστή σας μπορεί να είναι επικίνδυνο εάν δεν ξέρετε τι κάνετε. Φροντίστε να ακολουθήσετε τις οδηγίες σε αυτό το σεμινάριο όσο το δυνατόν πιο προσεκτικά, για να αποφύγετε τυχόν ατυχίες.

Δεν υποστηρίζει κάθε σύγχρονη διανομή Linux το σύστημα systemd init. Μερικοί χρησιμοποιούν upstart ή κάτι άλλο εντελώς. Σε αυτό το σεμινάριο, θα επικεντρωθούμε στο systemd καθώς είναι το πιο κοινό σύστημα εκκίνησης. Αν θέλετε να ολοκληρώσετε αυτήν την εργασία σε κάτι που δεν εκτελεί αυτό που καλύπτουμε σε αυτό το άρθρο, εξετάστε το ενδεχόμενο να ανατρέξετε στο εγχειρίδιο του λειτουργικού σας συστήματος για οδηγίες.

Σημείωση: Οι χρήστες του Debian θα πρέπει να αντικαταστήσουν όλες τις παρουσίες του usr/lib/systemd/system-sleep με το /lib/systemd/system-sleep/

Εκτέλεση εντολής πριν την αναστολή

Για να εκτελέσετε ένα σενάριο πριν από την αναστολή, τοποθετήστε οποιοδήποτε αρχείο σεναρίου bash στον κατάλογο /usr/lib/systemd/system-sleep/. Τα ίδια τα σενάρια μπορούν να κάνουν τα πάντα, αλλά υπάρχει μια συγκεκριμένη σύνταξη που πρέπει να τηρηθεί. Ξεκινήστε ανοίγοντας ένα παράθυρο τερματικού. Χρησιμοποιώντας sudo -s, αποκτήστε ένα κέλυφος ρίζας.

  Πώς να αποθηκεύσετε DVD και Blu-ray στον υπολογιστή σας Linux

Στη συνέχεια, ανεβάστε το νανο πρόγραμμα επεξεργασίας κειμένου μέσα στον κατάλογο αναστολής λειτουργίας συστήματος:

nano /usr/lib/systemd/system-sleep/pre-suspend.sh

Προσθέστε το shebang στην αρχή του σεναρίου. Η προσθήκη αυτού είναι κρίσιμη και χωρίς αυτήν, ο διερμηνέας δεν θα μπορεί να διαβάσει σωστά τον κώδικα και τις εντολές.

#!/bin/bash/

Το επόμενο μέρος του σεναρίου είναι το «αν». Αυτό θα πει στο σύστημα ελέγχου ισχύος ότι «αν» το σύστημα πρόκειται να πέσει για αναστολή, κάτι πρέπει να συμβεί. Επικολλήστε τον παρακάτω κώδικα:

if [ "${1}" == "pre" ]; then
sh /path/to/script/to/run.sh

Αλλάξτε το sh /path/to/script/to/run.sh στο σενάριο σε ό,τι θέλετε να εκτελείται στον υπολογιστή σας Linux (ή στο διακομιστή) ακριβώς πριν το σύστημα τεθεί εκτός λειτουργίας για αναστολή. Λάβετε υπόψη ότι η γραμμή αμέσως μετά το “if” δεν χρειάζεται να είναι sh /path/to/script/to/run.sh. Μπορείτε επίσης να το χρησιμοποιήσετε για να εκτελέσετε διάφορες εντολές. Όσο το bash μπορεί να το αναγνωρίσει ως εντολή, θα εκτελείται.

  Ελέγξτε εάν είστε ευάλωτοι σε κατάρρευση και Spectre στο Linux

Το τελευταίο μέρος του σεναρίου “πριν την αναστολή” είναι να προσθέσετε το τμήμα “άλλο εάν”. Αυτή η πτυχή του σεναρίου δεν χρειάζεται να τροποποιηθεί, καθώς, σε αυτό το παράδειγμα, ανησυχούμε μήπως κάνουμε κάτι πριν το σύστημα πέσει και όχι όταν ενεργοποιηθεί.

elif [ "${1}" == "post" ]; then
# nothing goes here
fi

Όταν όλα έχουν προστεθεί στο αρχείο, πατήστε Ctrl + O για αποθήκευση nano.

Εκτέλεση εντολής μετά τη συνέχιση

Η εκτέλεση μιας εντολής μετά τη συνέχιση λειτουργεί σαν να τρέχετε κάτι πριν την αναστολή. Η μόνη πραγματική διαφορά είναι ότι αντί να προσθέσετε μια εντολή μετά το τμήμα “if” του σεναρίου, θα κάνετε το πιο σημαντικό μέρος του κώδικα να εμφανίζεται μετά τη γραμμή “elif”.

Για να δημιουργήσετε ένα σενάριο μετά το βιογραφικό, πρώτα προσθέστε το shebang ως πρώτη γραμμή.

#!bin/bash

Στην επόμενη γραμμή, προσθέστε το τμήμα “if” του σεναρίου.

if [ "${1}" == "pre" ]; then
# nothing goes here

Με αυτό το κομμάτι κώδικα επικολλημένο στο σενάριο bash, μετακινηθείτε προς τα κάτω και επικολλήστε την ενότητα “else if”.

elif [ "${1}" == "post" ]; then
sh /path/to/script/to/run.sh
fi

Για άλλη μια φορά, είναι εντάξει να γράψετε οτιδήποτε κάτω από τη γραμμή “elif”. Εφόσον είναι μια κανονική λειτουργία εντολών το systemd και το bash θα το εκτελέσει.

  Πώς να εγκαταστήσετε το Spotify σε Linux

Εκτέλεση εντολών κατά την εκκίνηση και συνέχιση

Εάν θέλετε να εκτελέσετε δύο αντίθετες εντολές. ένα πριν την αναστολή και ένα στη συνέχιση, είναι δυνατό. Σημαίνει απλώς την προσαρμογή του σεναρίου και την προσθήκη γραμμών τόσο στη γραμμή ‘if’ όσο και στη γραμμή ‘elseif’.

Όπως συνήθως, ξεκινήστε δημοσιεύοντας το shebang στο σενάριο για τον διερμηνέα.

#!/bin/bash

Στη συνέχεια, επικολλήστε την ενότητα if του κώδικα.

if [ "${1}" == "pre" ]; then
# replace with command

Κάτω από το if, αντικαταστήστε το “# αντικαταστήστε με εντολή” με οποιαδήποτε εντολή θέλετε να εκτελέσετε ακριβώς πριν το σύστημα πέσει. Στη συνέχεια, μεταβείτε στην ενότητα “elif” και κάντε το ίδιο.

elif [ "${1}" == "post" ]; then
#  replace with command
fi

Αποθηκεύστε το αρχείο με Ctrl + O,

Ενημέρωση δικαιωμάτων και χρήση του σεναρίου

Όλες οι απαραίτητες εντολές βρίσκονται μέσα στο αρχείο του σεναρίου, αλλά για να μπορέσει να εκτελεστεί, θα χρειαστεί να ενημερώσετε τα δικαιώματα. Ανοίξτε ένα τερματικό και αποκτήστε root με: su ή sudo -s. Τότε κάνε:

chmod +x /usr/lib/systemd/system-sleep/pre-suspend.sh

Από εδώ και στο εξής, όποτε αναστέλλετε ή συνεχίζετε, οι προσαρμοσμένες εντολές στο εσωτερικό του σεναρίου θα πρέπει να εκτελούνται.

Σημείωση: έχετε ερωτήσεις σχετικά με το systemd system-sleep; Ελέγξτε το εγχειρίδιο με τον man systemd-suspend.service.