diff --git a/text/00209.md b/text/00209.md new file mode 100644 index 0000000..163a572 --- /dev/null +++ b/text/00209.md @@ -0,0 +1,143 @@ +## Его темнейшество cron + +Не знаю как у вас, но у меня с cronом не задалось с самых юных лет. Этот планировщик для автозапуска скриптов довел меня до ручки, хоть и весьма полезен. + +Ну не делать же резервные копии каждое утро руками. Или там связь проверять раз в 10 минут. Или мусор чистить на сервере - попробуй уследи без автомата. Вот и приходится идти к cronу на поклон. + +### "Куда-ж тебя?" или как я запускал cron + +Первое воспоминание, которое я с трепетом храню с самого детского сада, связано с попытками выйти из редактора crontab'а. Crontab - `/etc/crontab` - это такой файл со списком задач, по которому работает cron. + +Чтобы не заниматься жуткой магией с запихиванием обновленного файла в котлы памяти работающего crona я решил воспользоваться командой + +``` +crontab -e +``` + +Команда эта позволяет сначала отредактировать crontab, а после сохранения подскажет демону заглянуть в этот файл за новыми грешниками. Сама. + +Пусть многие скажут, что cron и сам все видит, я все же набил себе пару шишек на том, что это не всегда так. + +Кабы там ни было - решено и сделано: `crontab -e` + +### Приспешник vi или казнь редактором списка задач + +Что такое `vim` и `vi` я тогда не знал, а именно `vi` стоял редактором по-умолчанию на серваке с FreeBSD 4.0, на котором я колдовал. Может быть вам повезло и в вашей системе стоит по-умолчанию простой текстовый редактор, но мне - не повезло. + +Вскоре поняв что я не могу выбраться из лабиринта кронотавра, я запаниковал. + +Помню как хаотично я тыкал на кнопки и гуглил что попало, а заветный ctrl+c напрочь отказывался выполнять свою магическую функцию спасения моей души. + +"Божечки, только выйди, выйди Христа ради, да и бес уже с ним, с сохранением!" + +Кнопка `Esc`, а потом `:q!` + +Я уже и не помню из каких хтонических глубин ада выскочило это неведомое сочетание, но помню как дрожащими руками вытер холодный пот с расслабленного лба. Сработало. И даже не сохранилось то что я там в стрессе понатыкал. Фух. Слава богам. + +Как вообще про это можно догадаться? + +На протоптанной дорожке документации по `vi` нашлось и другое буквосочетание. + +`:wq` + +И я даже узрел в нем сакральный смысл - Write, Quit. Вход-выход-сохранить - разобрался. + +С этой душещипательной истории началось мое знакомство с cronoм. И тогда же я понял, насколько травмирующим для неокрепшей детской психики он может быть. + +Если вдруг кто сомневается, почитайте про гекатомбы жертв в блоге Stack Overflow: [Helping One Million Developers Exit Vim](https://stackoverflow.blog/2017/05/23/stack-overflow-helping-one-million-developers-exit-vim/) + +Название поста говорит само за себя и теперь там уже два миллиона. Хотя, казалось-бы, при чем тут cron. + +Это сейчас я знаю что cron тут (почти) не при чем и можно воспользоваться более удобным редактором. Cron берет его из переменной окружения `EDITOR`. Например на ubuntu есть nano, но мне больше нравится mcedit. С самого Norton Commanderа храню нежную любовь к синему фону: + +``` +EDITOR=mcedit crontab -e +``` + +Ну или вот ваш nano: + +``` +EDITOR=nano crontab -e +``` + +А на некоторых современных дистрибутивах можно выбрать редактор при помощи команды +``` +select-editor +``` + +Но если вдруг других вариантов нет, то на всякий случай я скажу - перед дальнейшими действиями уберите слабонервных и детей от консоли. И только потом начинайте редактировать: + +`Esc` потом `:i` + +Теперь вы в "режиме вставки" (которых в vi аж два) и можете перемещать курсор в нужное место. И в нужном месте вставлять текст. Похоже на обычный текстовый редактор. + +А если что-то не получается, то лучше пройти какое-то обучение. Самое необычное и прикольное, которое я видел - [Vim Adventures](https://vim-adventures.com/) + +### Расшифровка древних скрижалей или как я постигал формат записи о задаче + +Что-ж. Пожалуй где-то к этому моменту вам должно быть ясно как изменять crontab. Ну как ясно. Примерно как близорукому без очков. А вот что туда надо писать для запуска задачи пока видно только слепому Вельзевулу. + +Пытаясь разглядеть что ему там видно, я доедал 127 страницу `man crontab` и выяснил, что каждая строка в этом файле указывает `когда` и `что запускать`. При этом выглядит она примерно так: + +``` +0 0 * * * /home/lup/backup_database.sh +``` + +Если с правой частью `что запускать` мне все было понятно - это путь к скрипту-задаче, то глядя на левую часть `когда` я понял, что не зря службы в linuxе называют демонами. Этот демон готовил мне второй круг ада. + +Итак, что тут за клинопись: + +``` +[минуты] [часы] [число] [месяц] [день_недели] +``` + +Слово "каждый" или "любой" заменяется звёздочкой `*`. + +* Запускать кукушку каждый час, т.е. в 6:00, 7:00, 8:00, …, 23:00, 0:00 и т.д. - `0 * * * *`. + +* Запускать бэкап в 4:00 по понедельникам - `0 4 * * 1`. 4:00 самое тихое время. + +* Запускать расчет зарплаты один раз в месяц в 11:00 первого числа - `0 11 1 * *` + +Угадайте, могу ли я написать эти руны не заглядывая в `man crontab`? Могу , но только если нужный порядок указан комментарием в файле. + +Однажды, в очередной раз борясь с cronом я увидел то, что стало стаканом воды для иссушенного горла. Можно использовать псевдонимы времени! + +``` +@hourly /home/clock/coocoo.sh +@daily /home/bath/brush_teeth.sh +@weekly /home/flat/tidy_up.sh +@monthly /home/job/get_salary.sh +``` + +Слава богам! Так намного лучше! Теперь я использую только их. После стольких лет мучений демон подарил мне надежду - я могу писать `@daily`! Видимо потом он хочет ее разрушить, но пока - нет. + +### Котел с правами или почему может задача забыла сработать + +В третьем кругу ада я оказался позднее. Как-то раз, настроив скрипт бэкапа базы данных я расслабился. Ну все, теперь у меня есть ежедневная копия на специальном серваке. Могу не бояться. База в надёжных руках крона. Ага. + +База рухнула. Гордым уверенным шагом я вошёл на сервер в папку с бэкапами. Оглядевшись по сторонам, я понял, что в папке - пусто. + +"Надо было проверить на следующий день после настройки!" - рвал я на себе волосы. Но лысой головой не проще думать как восстановить базу. + +После того, как база была вновь поднята, я решил понять, почему не работает cron. И оказалось, что crontabы у каждого пользователя свои и права на выполнение задач у них ограничены. + +С тех пор только root, только системный crontab + +``` +sudo crontab -e +``` + +А всякие советы вроде "Executing cron tasks under root user is not preferred" вызывают у меня грустную ухмылку. Особенно когда читаю в новостях про проблемы с резервными копиями. + +Ну и вы проверьте, стартует ли задача как надо. На всякий случай. + +``` +grep CRON /var/log/syslog +``` + +В четвертом круге ада я оказался, когда понадеялся на переменные окружения и пути. С тех пор для каждой задачи я пишу отдельный sh-скрипт, а все данные и пути указываю в нем полностью. И все примеры в этой статье я сделал со скриптами именно поэтому. Хотя у скриптов есть ещё одно преимущество - я могу править их сколько угодно и не трогать настроенный cron. Детская травма, которой вам удалось избежать. Надеюсь. + +### Заключение о мануалах. Или нет + +В остальные круги ада я пока не попал, но одним философским вопросом я задаюсь. Зачем делать сложно и писать мануал? Ведь если сделать просто, мануал будет лишним. \ No newline at end of file diff --git a/vectors/107/info.json b/vectors/107/info.json new file mode 100644 index 0000000..076332c --- /dev/null +++ b/vectors/107/info.json @@ -0,0 +1,7 @@ +{ + "topics": ["Cron", "Linux", "Командная строка", "Терминал"], + "category": "Linux", + "img": "/img/nodejs.png", + "type": "vector", + "name": "Linux" +} diff --git a/vectors/107/stages/00.json b/vectors/107/stages/00.json new file mode 100644 index 0000000..74651ba --- /dev/null +++ b/vectors/107/stages/00.json @@ -0,0 +1,5 @@ +{ + "name": "Его темнейшество cron", + "type": "text", + "id": 209 +} diff --git a/vectors/107/text.md b/vectors/107/text.md new file mode 100644 index 0000000..47e5f43 --- /dev/null +++ b/vectors/107/text.md @@ -0,0 +1,4 @@ +Сложно заниматься разработкой и избежать работы с Linux. Эта операционная система - стандарт де-факто на многих серверах. + +Поработав с этой ОС разработчики нередко выбирают ее в качестве основной - удобство использования, +огромный инструментарий, бесплатность и открытость делают свое дело. \ No newline at end of file