Лукаин той публикува Преди време отличен урок за cron и crontab което мисля, че си струва да споделите. Cron е нещо като еквивалент на Scheduled Tasks в Windows, само че се обработва от терминала. Тези, които предпочитат визуален интерфейс, за да постигнат същата цел, могат да видят това друг елемент. |
Какво е cron?
Името cron идва от гръцкото chronos, което означава „време“. В операционната система Unix cron е обикновен мениджър на фонови процеси (демон), който изпълнява процеси или скриптове на равни интервали (например всяка минута, ден, седмица или месец). Процесите, които трябва да бъдат изпълнени, и времето, в което те трябва да бъдат изпълнени, са посочени във файла crontab.
Комо произведения
Демонът на cron започва от /etc/rc.d/ o /etc/init.d в зависимост от разпределението. Cron работи във фонов режим, проверява таблицата на задачите crontab всяка минута / И т.н. / кронтаб о EN / var / макара / cron в търсене на задачи, които трябва да бъдат изпълнени. Като потребител можем да добавяме команди или скриптове със задачи към cron, за да автоматизираме някои процеси. Това е полезно например за автоматизиране на актуализацията на система или добра система за архивиране.
Какво представлява Crontab?
Crontab е прост текстов файл, който съхранява списък с команди, които трябва да бъдат изпълнени в момент, определен от потребителя. Crontab ще провери датата и часа, когато трябва да се изпълни скриптът или командата, разрешенията за изпълнение и ще го направи във фонов режим. Всеки потребител може да има свой собствен crontab файл, всъщност / И т.н. / кронтаб приема се, че това е файлът crontab на root потребителя, когато нормалните потребители (и дори root) искат да генерират свой собствен crontab файл, тогава ще използваме командата crontab.
Crontab е най-лесният начин за управление на cron задачи в многопотребителски системи, като обикновен потребител на системата или като потребител на root.
Използване на crontab
Започваме с прост пример.
Ще автоматизираме актуализацията на дадена система, за да премахнем досадното "Винаги трябва да актуализирам и това не ми харесва!"
На първо място ще направим сценарий. Този скрипт ще бъде извикан от cron и ще съдържа всички инструкции, които искаме да направи, затова е необходимо да го тествате в няколко случая и по няколко начина, преди да го включите в cron, прост скрипт за актуализация като този:
#! / bin / bash # пример за актуализация на скрипт # изберете вашата дистрибуция # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu
Премахнете # от вашата дистрибуционна линия. В случай, че е Ubuntu / Debian, той започва с apt-get.
Записваме скрипта като update.sh (напр. Скриптове в дома ви). Променяме разрешенията за изпълнение на споменатия скрипт с:
chmod a + x ~ / scripts / update.sh
Изпълняваме скрипта няколко пъти, за да проверим дали всичко работи гладко, модифицираме необходимото (не трябва да съдържа грешки, в противен случай cron ще повтаря грешка само отново и отново). Сега да добавим задачата към нашия crontab.
Добавете задачи към crontab
Изпълняваме изданието на crontab с crontab -e, в някои дистрибуции (като Ubuntu) ни дава възможност да изберем текстовия редактор, който искаме, останалото ни остава с vi. Файлът crontab ще изглежда по подобен начин.
# mh dom mon dow потребителска команда
когато:
- m съответства на минутата, в която ще бъде изпълнен скриптът, стойността варира от 0 до 59
- h точното време, обработва се 24-часовият формат, стойностите варират от 0 до 23, като 0 е 12:00 полунощ.
- подарък се отнася до деня на месеца, например можете да посочите 15, ако искате да стартирате на всеки 15 дни
- Dow означава ден от седмицата, той може да бъде цифров (0 до 7, където 0 и 7 са неделя) или първите 3 букви на деня на английски език: понеделник, вторник, сряда, четвъртък, петък, събота, слънце.
- потребител дефинира потребителя, който ще изпълни командата, тя може да бъде root или различен потребител, стига да има разрешения за изпълнение на скрипта.
- команда се отнася до командата или абсолютния път на скрипта, който трябва да бъде изпълнен, пример: /home/usuario/scripts/update.sh, ако извика скрипт, той трябва да бъде изпълним
За да бъдат ясни, обяснени са няколко примера за cron задачи:
15 10 * * * потребител /home/user/scripts/update.sh
Той ще стартира скрипта update.sh в 10:15 часа всеки ден
15 22 * * * потребител /home/user/scripts/update.sh
Ще стартира скрипта update.sh в 10:15 всеки ден
00 10 * * 0 root apt-get -y update Корен потребител
Ще се актуализира всяка неделя от 10:00 часа
45 10 * * актуализация apt-get -y sun root
Потребителят на root ще стартира актуализация всяка неделя (неделя) в 10:45 сутринта
30 7 20 11 * потребител /home/usuario/scripts/update.sh
На 20 ноември в 7:30 потребителят ще стартира скрипта
30 7 11 11 потребител на слънце /home/usuario/scripts/pastel_con_velitas.sh
На 11 ноември в 7:30 сутринта, а това е неделя, потребителят ще отпразнува своя сисадмин (тоест аз)
01 * * * * потребител /home/usuario/scripts/molestorecordatorio.sh
Досадно напомняне всяка минута на всеки час всеки ден (НЕ се препоръчва).
С тях все още може да се работи специални гами:
30 17 * * 1,2,3,4,5
В 5:30 следобед всеки ден от понеделник до петък.
00 12 1,15,28 * *
В 12 на обяд на първото, петнадесетото и 28-о число на всеки месец (идеално за ведомост)
Ако това е объркващо, crontab се справя специални низове за дефиниране на тези диапазони.
@reboot Стартирайте веднъж, при стартиране
@yearly работи само веднъж годишно: 0 0 1 1 *
@ ежегодно същото като @yearly
@monthly работи веднъж месечно, първия ден: 0 0 1 * *
@weekly Weekly първата минута от първия час на седмицата. 0 0 * * 0 ″.
@daily всеки ден, в 12:00 ч. 0 0 * * *
@ полунощ същото като @daily
@ на час в първата минута на всеки час: 0 * * * *
Използването му е много просто.
@hourly user /home/user/scripts/molestorecordatorio.sh @ ежемесечен потребител /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y upgrade
Не на последно място:
Cron управление на работата
crontab файл
Заменете съществуващия crontab файл с дефиниран от потребителя файл
кронтаб -е
Редактирайте файла crontab на потребителя, всеки нов ред ще бъде нова задача crontab.
crontab -l
Избройте всички задачи на crontab на потребителя
crontab -d
Изтрийте crontab на потребителя
crontab -c реж
Определя директорията crontab на потребителя (това трябва да има разрешенията за писане и изпълнение на потребителя)
crontab -u потребител
префикс за обработка на crontab на друг потребител, примери:
$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u потребител
Този инструмент, както и много други, може да се види по-задълбочено и по-подробно в:
Уф ... малко объркващо.
* / 30 липсва (в полето за минути), което се изпълнява на всеки 30 минути ...
Точно това щях да коментирам, докато не реших да прегледам коментарите 😀
Този модификатор е много важна информация и нещо много полезно.
Здравейте!
В момента тествам конфигурация на всеки 45 минути.
* / 45 * * * *, а инструкцията се изпълнява на 45 минути на всеки час И на всеки час. Това ще рече:
Работи в 3:45, след това в 4:00, 4:45, след това в 5:00, 5:45, 6:00, 6:45 и т.н.
Имам нещо нередно? Какво мога да направя, за да го направя само на всеки 45 минути или поне веднъж на 45 минути на всеки час.
Здравейте!
В момента тествам конфигурация на всеки 45 минути.
* / 45 * * * *, а инструкцията се изпълнява на 45 минути на всеки час И на всеки час. Това ще рече:
Работи в 3:45, след това в 4:00, 4:45, след това в 5:00, 5:45, 6:00, 6:45 и т.н.
Имам нещо нередно? Какво мога да направя, за да го направя само на всеки 45 минути или поне веднъж на 45 минути на всеки час.
Здравейте супер полезна информацията за изясняване как работи cron.
Bytes
за *
Отлично, благодаря, че изяснихте как работи cron .. нека да подадем ръка 🙂
Този ред, както разбирам, ще бъде изпълнен в 10:15 ч., Поправете ме, ако греша
Ами там пише 10:15 сутринта
15 22 * * * потребител /home/user/scripts/update.sh
Здравейте! много добра информация.
За да се изпълни скрипт на всеки половин час, редът, който трябва да се добави към CronTab, ще бъде: "30 * * * * root Scrip.sh" Правилно? Много благодаря!
Не. Ако си спомням правилно, за това трябва да сложите / 30 * * * * root Scrip.sh.
Тоест, добавете / преди 30.
Наздраве! Павел.
Здравейте, харесах вашата публикация, тя е много пълна, но исках да ви попитам нещо.
Имам проблеми с тази команда и една като "в".
Искам да стартирам скрипт в определено време и да го сложа
в -f /home/mi_user/Desk/script.sh 18:08 пример
и скриптът не се изпълнява на екрана, тоест в терминала, изпълнява ли се във фонов режим?
И с cron се случва същото с мен, аз редактирам файла crontab с "crontab -e"
в края добавям този ред:
46 19 my_user /home/mi_user/Desk/script.sh
и не прави нищо, не показва сценария.
Някакво предложение? Благодаря ви много и се извиняваме за евентуалните неудобства
За да се появи терминалът, може да се наложи да стартирате терминала и да предадете скрипта като параметър.
Например:
lxterminal -e "my_user /home/mi_user/Desktop/script.sh"
Параметърът, който трябва да използвате, може да варира в зависимост от терминалния емулатор, който използвате.
Надявам се да работи.
Прегръдка! Павел.
Приносът е оценен.
10 точки !!
поздрав2 !!
Благодаря ви много, много ми помогна да изясня някои неща, пълна благодарност, за повече подробности или въпроси ще отида на СТРАНИЦАТА НА МЪЖА, повторен поздрав.
Чичо много благодаря, четох и тествах примерите. много благодаря ... много е разбираемо. Наздраве
Използвах ubuntu Server 12.04.2 LTS и се използва версията на crontab, която имам, за изтриване на списъка със заданията на потребителя, crontab -r (и -l, както се казва в това ръководство). Разбира се, става въпрос за версии.
От друга страна, веднъж стартирах само crontab и този вид ми позволи да създам свой собствен изпълнителен файл, но това не беше този, който се изпълняваше. Този, който се изпълнява, е този в / etc / crontab. може би някой ще използва коментара.
PS (Търсих с locate и whereis crontab, но той върна само гореспоменатия адрес и друг файл, който е криптиран, така че ако този, който беше изпълнен, беше този в / etc / crontab, но при изпълнение на командата crontab -e, моят би се появяват с всички задания, които бях дефинирал) къде се съхранява този файл '???? За разбирането. Винаги влизам с root.
Отлично, много полезно !!!
Здравейте, бих искал да направя това ………… «15 10 * * * root ifdown eth0»
тоест в определено време мрежовата карта се изключва ………… добре, сложих я в crontab и тя не работи …… .. какво има?
Saludos г. Gracias
Пропуснахте да дефинирате „mon“ след заглавието „Добавяне на задачи в crontab“
Статията все още е хубава, cron е изключително полезна.
Колко готин беше този добър пост, попитайте ме
Ако искам да следя записите, оставени от изпълнението на задачите, къде мога да го видя?
е да реша, че искам да видя историята на действията, извършени в миналото на този файл и искам да видя кой го е променил и датата
благодаря
Искам да проверя историята на модификациите на това
как мога да го направя
благодаря
Добро утро,
Мисля, че в скрипта на ubuntu сте сгрешили, сте сложили надстройка ap-get -y вместо apt-get -y ъпгрейд. (Оставили сте t).
За поздрав.
Така е. Благодаря ти!
Прегръдка! Павел
Искам да знам как да създам cron файл, за да мога да определям времето, когато се изпълнява, директорията и т.н.
Благодаря, че изяснихте операцията и основните команди за cron, сега да се забавлявате за малко.
Винаги, когато търся информация по която и да е тема, свързана с Gnu / Linux, обикалям, за да намеря винаги в 90% от случаите най-добрия урок в тази велика общност, мисля, че оттук нататък ще започна тук и след това на друго място.
поздрави
Благодаря Sander! Прегръдка! Павел.
dom = ден от месеца
dow = ден от седмицата
по-лесно е, ако асоциирате
Благодаря ви много, много пълно и добре обяснено.
Това е същото нещо, което ни даде моят учител по операционни системи, не променям нищо, сега виждам защо класът е толкова лош.
Изчислено,
Заявка, може ли да се ограничи продължителността на дадена задача?
Например имам задача, която се повтаря на всеки 5 минути, при повторение, ако тази задача е все още активна, оставете я да я убие и да я стартира отново.
Благодаря,
Марсело.
Здравей, Марсело!
Мисля, че би било по-добре да повдигнете този въпрос в нашата услуга за въпроси и отговори попитам DesdeLinux за да може цялата общност да ви помогне с вашия проблем.
Прегръдка, Пабло.
добър пост.
Каква е командата на терминал за добавяне на задачи към crontab (без да въвеждате crontab и да ги добавяте ръчно с 'crontab -e' или да замествате crontab с друг crontab с 'crontab файл').
Идеята е да се създаде външен скрипт за добавяне на задачите към crontab
благодаря
струва ми се, че бихте могли да използвате 'echo' каквото искате да добавите '| котка >> 'пътека на cronotab (/ etc / cronotab)' «
Как би се изпълнил израз на всеки 3 дни точно
Здравейте.
Имам проблем с изпълнението на cron работа.
Изпълнявам следната задача с cronta -e:
01 * * * * root /home/user/script/mfile.sh
но задачата не е изпълнена. Проверих дали myfile.sh има разрешение за изпълнение и дали потребителят, който го изпълнява, е root.
Изпълнявам същата задача в / etc / crontab и след рестартиране на услугата, тя също не работи при мен.
Съдържанието на myfile.sh е команда, която актуализира DB и ако я стартирам в конзолата, тя работи.
някаква идея какъв може да е проблемът?
Потребителят на базата данни може да няма всички разрешения и първо ще трябва да експортирате променливите на средата от вашия механизъм на базата данни.
Например в db2, този ред ще отиде в началото на скрипта
. / home / db2inst1 / sqllib / db2profile
Друга причина може да бъде, че скриптът изисква връзка с базата данни, направете връзка с базата данни в рамките на скрипта
Не знаех, че трябва да рестартирам crond, от известно време се борих с това
Те ще знаят как да посочат, че задачата се изпълнява всеки край на месеца, в посочения час .. детайлът е, че не мога да постигна как знам, че отнема последния ден на всеки месец .. ??? Трябваше да ги запиша един по един, но когато дойде края на месец февруари, че е biciesto, за мен е сложно ..
добър ден!!
Как да спра процеса, който се изпълнява в crontab?
процес * …………
Може ли да ми помогнете? eu tenho um script от автор на minha, който не работи, няма crontab! Jб действа всички разрешения, а не конкретен cron или потребител, който може да го изпълни - почти нищо не се случва! Бих искал да знам дали можете да ми помогнете, някои други неща не работят без крон! Vlws
Как бихте поставили задача да се изпълнява всеки последен ден от месеца (дни: 31-30-28)?
Както вече знаете, командата su се използва за промяна на потребител в конзола. Ако използвам командата su по следния начин: "вашият потребител" променя потребителя, но без правилните настройки на "потребител", ако стартирам su като: "su - потребител" променя потребителя чрез зареждане на потребителските настройки. С cron посочвам потребителя, но как да заредя настройките на този потребител?
И ако искам да го спра?
Здравейте,
Не знам какво правя погрешно, но следвам стъпките и нищо не се изпълнява. Опитах:
59 * * * * / usr / bin / gedit
* * * * * / usr / bin / gedit
* * * * * root / usr / bin / gedit
* * * * * usr / bin / test.sh
* * * * * root usr / bin / test.sh
и изобщо нищо. Той не изпълнява нищо. Рестартирах и всичко.
Благодаря ви много