ВЫПОЛНЕНИЕ BASH СКРИПТА ПО РАСПИСАНИЮ
Или "Спокойной ночи, малыши!"
Была женщина, сова, очень любила попить чаю часов до двух ночи, позалипать в ютубчик и т. д. А мы жили в коммуналке, в одной комнате, и это здорово мешало мне высыпаться перед работой. Никакие уговоры не помогали и как ее перевоспитать, я так и не додумался, но вот, среди прочих, однажды в голову пришла замечательная идея автоматизировать процесс выключения ее компьютера, благо, у меня всегда был к нему доступ по ssh. Первая мысль - это написать bash скрипт и кинуть его куда-нибудь в автозагрузку. Я очень люблю bash скрипты, но, к сожалению, плохо их знаю и не имею ни малейшего понятия как там сделать проверку времени. Поэтому решил использовать плюсы. Почему бы и нет? Но сначала следует создать пользователя, чтобы сохранить возможност экстренной загрузки системы при каком-нибудь форсмажоре. Инструкция здесь.
Теперь сделаем пару файлов. Первым будет, собственно, сам sh скрипт.
sudo touch ~/shutdown.sh
С таким содержимым:
#!/bin/bash echo "sh скрипт инициирован. Вы, должно быть, уже спите!" sudo shutdown now
Понятное дело, он должен быть исполняемым:
sudo chmod +x ~/shutdown.sh
Далее поработаем над файлом программы, которая проверяет имя пользователя и если этот пользователь - Lara, то узнает время и до восьми часов утра вызывает этот скрипт, а в противном случае ничего не делает.
nano ~/goodnight.cpp
B размещаем в нем следующее содержимое:
#include "stdio.h" #include "unistd.h" #include "iostream" #include "ctime" #include "stdlib.h" using namespace std;
char* Usr; //создаем указатель Usr = getenv("USER"); //Указываем откуда взять имя пользователя std::string User; //Объявляем стринг чтобы потом переписать в него значение, указанное в char* User = Usr; //Ну и указываем, чему должен быть равен наш User int main() { //Запускаем бесконечный цикл. while(1) {
if( User == "Lara") { //Инициируем проверку. Если пользователь - Lara, то проверяем, сколько времени.
//Далее проверяем сколько времени.
//Обязательно в цикле, потому что время, как известно, не стоит на месте. time_t now = time(0); tm *ltm = localtime(&now); double Time; Time = ltm->tm_hour; //Значение возвращается в формате 24 часа, без минут. Минуты нам не важны. if (Time > 8) { //Если время меньше восьми... Тогда начинаем психологическое воздейств
cout << "Checking for user..." << endl;
sleep(2); cout << "Attention! User Lara detected!" << endl; cout << "Нефиг сидеть по ночам за компом!!! А ну, марш в кровать!" << endl; sleep (2); cout << "Компьютер выкдючится через..." << endl; sleep (1); cout << "10" << endl; sleep (1); cout << "9" << endl; sleep (1); cout << "8" << endl; sleep (1); cout << "7" << endl; sleep (1); cout << "6" << endl; sleep (1); cout << "5" << endl; sleep (1); cout << "4" << endl; sleep (1); cout << "3" << endl; sleep (1); cout << "2" << endl; sleep (1); cout << "1" << endl; sleep (1); cout << "Спокойной ночи!" << endl; sleep (1); system("/home/madmentat/MyPrograms/Timer/shutdown.sh"); //И, наконец, запускаем скрипт, который вырубит комп. } } } }
Остается только закинуть всю эту красоту в автозагрузку и комп будет тупо выключаться вплоть до 8 утра. Автозагрузка в Linux - это уже тема для следующей статьи.