Προγραμματισμένο κλείσιμο του υπολογιστή

Θα ήθελα να παρουσιάσω μια εφαρμογούλα για να κλείνουμε τον υπολογιστή, κυρίως σε προγραμματισμένο χρόνο.
Οι παλιοί θα την ξέρουν, πιθανών, αλλά και για τους άπειρους είναι πολύ εύκολη να τη θυμάστε.
αυτην χρησιμοποιώ κάθε φορά που θέλω να δώ ταινία και να κοιμηθώ, δε χρειάζεται να εγκαταστήσετε κάτι υπάρχει σίγουρα στην διανομή σας
Είναι μια εφαρμογή κονσόλας, δηλαδή είναι μιά μικρή, σύντομη, και έυκολη εντόλη η οποία έχει τις παρακάτω μορφές:

1)Με αυτήν τη μορφή θα κλείσει ο υπολογιστής την συγκεκριμένη ώρα (22:30)

sudo shutdown -h +22:30

2)Η άλλη της μορφή θα κλείσει το μηχάνημα μετά από τα λεπτά της ώρας που θα ορίσουμε, στο παράδειγμά μας μετά από 120 λεπτά:

sudo shutdown -h +120

π.χ έχουμε να δούμε την ταινία: “Η ΕΚΔΗΚΙΣΗ ΤΟΥ ΤΆΔΕ” με πρωταγωνιστή τον Έτσι, η ταινία έχει διάρκεια 119 λεπτά και μετά …ύπνο, δινουμε την εντολή αυτήν και ξενιάζουμε.

3)Με την επόμενη μορφή κλείνουμε το υπολογιστή άμεσα:

sudo shutdown -h now

4)Να συμπληρώσω το πως ακυρώνουμε την διαδικασία αν για κάποιο λόγο το μετανιώσουμε:

sudo shutdown -c

Για τέλος θα μου πείς: θέλω να μάθω για την εφαρμογή αυτήν!
Ε αν είναι έτσι δώσε στο τερματικό:

man shutdown

και θα έχεις περισσότερα!
Είναι οικολογική εφαρμογή λοιπόν, και κοιμήσου χωρίς να σε νοιάζει μην κάψεις παραπάνω ρεύμα.

12 Likes

Σε ένα σύγχρονο σύστημα θα βρούμε πως οι εντολές αυτές κρύβουν το systemctl

image

Για όσους δεν αρέσει το τερματικό υπάρχει το kshutdown

5 Likes

Σε ενα συγχρονο συστημα με systemd, ναι, οδηγει στο systemctl. Σε ενα συγχρονο συστημα χωρις systemd, παραμενει ενας διακοπτης που τερματιζει το initscript.

Και καλα κανει ο stefra και μας τον θυμιζει, γιατι εχει τη σημασια του το να μην μενει 24/7 ανοικτο ενα οικιακο συστημα ;)

Τα πράγματα είναι κάπως ποιο πολύπλοκα. Σε ένα παραδοσιακό σύστημα θα κάνει κάτι σαν το παρακάτω:

/* Kill all processes. */
kill(-1, SIGTERM);	
kill(1, SIGTSTP) 
sleep(1);
spawn(1, "accton", "off", NULL);
spawn(1, "quotaoff", "-a", NULL);
sync();
spawn(0, "swapoff", "-a", NULL);
spawn(0, "umount", "-a", NULL);
init_reboot(BMAGIC_HALT);

η τελευταία εντολή θα μιλήσει με το /dev/initctl για να αλλάξει το runlevel και το init θα καλέσει την κατάλληλη κλήση συστήματος για να τερματίσει τον υπολογιστή. Βλέπουμε πως δεν έχει καμία εμπιστοσύνη πως θα το κάνει σωστά και απενεργοποιεί τους δίσκους και το swap, πριν τερματίσει. Αν πάει κάτι στραβά θα χάσουμε την πληροφορία. Ένα σωστό init θα πρέπει να μπορεί να τερματίζει το σύστημα μόνο του. Και υπάρχουν περιπτώσεις που δεν θέλουμε να τερματίσει έτσι απλά. Για παράδειγμα όταν τρέχει το apt πρέπει να εξασφαλίσεις ότι θα έχει τελειώσει ή τουλάχιστον να του δώσεις επαρκή χρόνο. Κάτι που μπορείς να το εξασφαλίσεις εύκολα με το systemd.

ΥΓ: Αυτό είναι αυτό που επιζητούμε σε αυτό το φόρουμ. Οι χρήστες να μοιράζονται ότι χρήσιμο βρίσκουν :slightly_smiling_face:

Ερμηνευεις λανθασμενα το ασφαλες “κλεισιμο” ενος Η/Υ.

Ο διακοπτης shutdown δεν παιζει με το συστημα σου - οταν τον καλεσεις, κοβει τις διεργασιες, αφαιρει τους δισκους και δινει HALT στο συστημα. Οτιδηποτε διαφορετικο ειναι που θα προκαλεσει απωλεια δεδομενων.

Αν δεν θελεις να λειτουργει με αυτον τον καθετο τροπο - μπορεις να sciptαρεις τη χρηση του. Σε συστηματα UNIX σχεδον παντα θα βρεις καποιο script με ονομα πχ powerdown που μπορει να διαφοροποιει τη λειτουργια shutdown, Δεν χρειαζεται να δημιουργησεις ενα διαφορετικο τροπο λειτουργιας τους συστηματος με καινουργια ονοματα για να κανεις τις ιδιες βασικες δουλειες.

** Βλεπω οτι προσθετεις δεδομενα στο ποστ σου οση ωρα γραφω την απαντηση μου - ελπιζω να απαντησα σωστα και να μην μου ξεφυγε κατι.

Μα ακριβώς εκεί είναι το πρόβλημα, χωρίς σωστό depedency managment και έλεγχο των διεργασιών δεν έχει η εντολή καμία εμπιστοσύνη ότι θα γίνει σωστά. Το να στέλνεις ένα βάναυσο SIGTERM στο apt που μπορεί να έχει κάνει fork κάτι άλλο είναι συνταγή προς την καταστροφή, όχι το αντίθετο να επιτρέπεις σε μια διεργασία να ειδοποιεί το σύστημα με ασφάλεια πως κάνει κάτι σημαντικό και καλό είναι να την αφήσεις να τελειώσει πρώτα. Αλλιώς μια χαρά τραβάς και τον διακόπτη από την πρίζα :grinning:. Τεσπα ξεφύγαμε…

Και για να επιστρέψουμε, επειδή κι εγώ(όπως και πολλοί άλλοι) έχω τη συνήθεια της θέασης ταινιών/σειρών ως υπνωτικό :laughing: , ήθελα κάτι πιο ευέλικτο από το προγραμματισμένο κλείσιμο του υπολογιστή. Έτσι, πριν χρόνια, με τη χρήση του systemctl δημιούργησα μια εφαρμογή η οποία διαθέτει το πρόσθετο χαρακτηριστικό της λειτουργίας αναβολής. Η λειτουργία αυτή λοιπόν, δίνει τη δυνατότητα, σε περίπτωση που χρειάζεται μια δεύτερη δόση υπνωτικού(θέαση μιας ακόμη ταινία/επεισόδιο σειράς), της επέκτασης του χρόνου για τον τερματισμό, μέσω ενός διαλόγου που εμφανίζεται ένα λεπτό πριν τη λήξη του χρόνου. Η εφαρμογή αυτή δημιουργήθηκε αρχικά σε java και πριν μερικά χρόνια την έκανα port σε python3 και pyqt5. Την περίοδο εκείνη επειδή είχα κάποια προβλήματα με την παραπάνω εφαρμογή, λόγω του εικονιδίου της το οποίο δεν εμφανιζόταν στο tray του plasma, έφτιαξα ένα bash script που σε γενικές γραμμές έκανε το ίδιο. Παραθέτω λοιπόν τα περιεχόμενά του εδώ, μήπως κάποιος θέλει να το χρησιμοποιήσει ή/και να το τροποποιήσει:
snooze.pdf (3,7 KB)
Χρειάζεται το yad για την εμφάνιση των διαλόγων. Επίσης αφαιρέστε την κατάληξη .pdf και(αν χρειαστεί) κάντε το αρχείο εκτελέσιμο.
Μπορώ να ανεβάσω και την python εφαρμογή αν κάποιος θέλει να τη δοκιμάσει. Το script είναι πιο απλό και πιο πιθανό στο να τρέξει οπουδήποτε όμως, μιας και η εφαρμογή δεν έχει κάποιο αρχείο εγκατάστασης και χρειάζεται και κάποιες επιπλέον εξαρτήσεις, οπότε πιθανότατα δε θα τρέξει out of the box.

3 Likes

Πήρα το θάρρος και μετέφερα τον κώδικα εδώ:

Δεν σε άφηνε να ανεβάσεις το αρχείο με άλλη κατάληξη; Θα το κοιτάξουμε κάποια στιγμή αν και καλύτερα κώδικες να είναι εξωτερικοί. Ευχαριστούμε για τον κώδικα πάντως :blush:

1 Like

Καλά έκανες. Κι εγώ τον κώδικα προσπάθησα να βάλω απ’ ευθείας αρχικά, αλλά κάτι κάνω λάθος φαίνεται και τον εμφάνιζε ως απλό κείμενο.

1 Like

Εδώ να συμπληρώσω κάτι σε σχέση με τα σχόλια-απαντήσεις.
Κατ’αρχάς θα ήθελα κάποιος να γνωρίζει ότι δεν είμαι αυτό που λέμε στα ελληνικα “power user”, είμαι ένας απλός χρήστης, απλά χρησιμοποιώ κάποια linux διανομή μόνιμα από το 2012 και στην διάρκεια του χρόνου αυτού έμαθα λίγα πράγματα, και δεν είμαι εδώ για να κάνω κάποιου είδους επίδειξη, γι’ αυτό και όλα τα στοιχεία που έδωσαν οι φίλοι στίς απαντήσεις τους με κάναν πιο πλούσιο και μάλιστα χωρίς εκείνοι να φτωχύνουν, τους ευχαριστώ γι’ αυτό.
Επίσης κάποιος στο μέλλον θα διαβάσει αυτά και εκεί είναι το κέρδος.

Τέλος θα ήθελα να σημειώσω ότι όταν κάποια στιγμή διάβασα περισσότερα σε σχέση με την shutdown βρήκα την πληροφορία ότι κλείνει το μηχάνημα in a secure way και γι’ αυτό και αυτή η παρουσίαση

5 Likes

Έπεσα σήμερα σε αυτό

που εξηγεί την ιστορία της εντολής. Ναι το θυμάμαι το sync; sync; sync; halt :sweat_smile:.

Τώρα ξέρω και το γιατί.

1 Like