`
qtlkw
  • 浏览: 307179 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Schedule tasks on Linux using crontab

阅读更多
转载: http://kevin.vanzonneveld.net/techblog/article/schedule_tasks_on_linux_using_crontab/

If you've got a website that's heavy on your web server, you might want to run some processes like generating thumbnails or enriching data in the background. This way it can not interfere with the user interface. Linux has a great program for this called cron. It allows tasks to be automatically run in the background at regular intervals. You could also use it to automatically create backups, synchronize files, schedule updates, and much more. Welcome to the wonderful world of crontab.

Crontab
The crontab (cron derives from chronos, Greek for time; tab stands for table) command, found in Unix and Unix-like operating systems, is used to schedule commands to be executed periodically. To see what crontabs are currently running on your system, you can open a terminal and run:

sudo crontab -l

To edit the list of cronjobs you can run:

sudo crontab -e

This wil open a the default editor (could be vi or pico, if you want you can change the default editor) to let us manipulate the crontab. If you save and exit the editor, all your cronjobs are saved into crontab. Cronjobs are written in the following format:

0 1 * * * /apps/sendNotificationMail/sendNotification.sh 2>&1 >> /apps/sendNotificationMail/logs/notificationCrontab.log

* * * * * /bin/execute/this/script.sh


Scheduling explained
As you can see there are 5 stars. The stars represent different date parts in the following order:

   1. minute (from 0 to 59)
   2. hour (from 0 to 23)
   3. day of month (from 1 to 31)
   4. month (from 1 to 12)
   5. day of week (from 0 to 6) (0=Sunday)

Execute every minute

If you leave the star, or asterisk, it means every. Maybe that's a bit unclear. Let's use the the previous example again:

* * * * * /bin/execute/this/script.sh

They are all still asterisks! So this means execute /bin/execute/this/script.sh:

   1. every minute
   2. of every hour
   3. of every day of the month
   4. of every month
   5. and every day in the week.

In short: This script is being executed every minute. Without exception.
Execute every Friday 1AM

So if we want to schedule the script to run at 1AM every Friday, we would need the following cronjob:

0 1 * * 5 /bin/execute/this/script.sh

Get it? The script is now being executed when the system clock hits:

   1. minute: 0
   2. of hour: 1
   3. of day of month: * (every day of month)
   4. of month: * (every month)
   5. and weekday: 5 (=Friday)

Execute on workdays 1AM

So if we want to schedule the script to Monday till Friday at 1 AM, we would need the following cronjob:

0 1 * * 1-5 /bin/execute/this/script.sh

Get it? The script is now being executed when the system clock hits:

   1. minute: 0
   2. of hour: 1
   3. of day of month: * (every day of month)
   4. of month: * (every month)
   5. and weekday: 1-5 (=Monday til Friday)

Execute 10 past after every hour on the 1st of every month

Here's another one, just for practicing

10 * 1 * * /bin/execute/this/script.sh

Fair enough, it takes some getting used to, but it offers great flexibility.

Neat scheduling tricks
What if you'd want to run something every 10 minutes? Well you could do this:

0,10,20,30,40,50 * * * * /bin/execute/this/script.sh


But crontab allows you to do this as well:

*/10 * * * * /bin/execute/this/script.sh


Which will do exactly the same. Can you do the the math? ;)

Special words
If you use the first (minute) field, you can also put in a keyword instead of a number:

@reboot     Run once, at startup
@yearly     Run once  a year     "0 0 1 1 *"
@annually   (same as  @yearly)
@monthly    Run once  a month    "0 0 1 * *"
@weekly     Run once  a week     "0 0 * * 0"
@daily      Run once  a day      "0 0 * * *"
@midnight   (same as  @daily)
@hourly     Run once  an hour    "0 * * * *


Leave the rest of the fields empty so this would be valid:

@daily /bin/execute/this/script.sh

Storing the crontab output

By default cron saves the output of /bin/execute/this/script.sh in the user's mailbox (root in this case). But it's prettier if the output is saved in a separate logfile. Here's how:

*/10 * * * * /bin/execute/this/script.sh 2>&1 >> /var/log/script_output.log

Explained
Linux can report on different levels. There's standard output (STDOUT) and standard errors (STDERR). STDOUT is marked 1, STDERR is marked 2. So the following statement tells Linux to store STDERR in STDOUT as well, creating one datastream for messages & errors:

2>&1


Now that we have 1 output stream, we can pour it into a file. Where > will overwrite the file, >> will append to the file. In this case we'd like to to append:

>> /var/log/script_output.log


Mailing the crontab output
By default cron saves the output in the user's mailbox (root in this case) on the local system. But you can also configure crontab to forward all output to a real email address by starting your crontab with the following line:

MAILTO="yourname@yourdomain.com"

Mailing the crontab output of just one cronjob
If you'd rather receive only one cronjob's output in your mail, make sure this package is installed:

aptitude install mailx

And change the cronjob like this:
*/10 * * * * /bin/execute/this/script.sh 2>&1 | mail -s "Cronjob ouput" yourname@yourdomain.com


Trashing the crontab output
Now that's easy:

*/10 * * * * /bin/execute/this/script.sh 2>&1 > /dev/null


Just pipe all the output to the null device, also known as the black hole. On Unix-like operating systems, /dev/null is a special file that discards all data written to it.
分享到:
评论

相关推荐

    Linux——Crontab使用详解.docx

    * Scheduled Tasks:Crontab 可以用来执行定期任务,例如备份数据库、发送邮件等。 * Automated Jobs:Crontab 可以用来自动执行一些任务,例如数据分析、数据导出等。 * System Maintenance:Crontab 可以用来执行...

    22-08-25-065_JsonTable(nopCommerce计划任务(ScheduleTasks)的定义实现)

    nopCommerce程序中计划任务(ScheduleTasks) 原理是:被.Net(Core)内置管道中间件所调用,以保证在程序开始启动执行时,实例化当前程序中的所有计划任务实例,并为这些任务实例构建相应的线程实例;并保证在程序其后...

    22-09-15-01_JsonTable(nopCommerce计划任务(ScheduleTasks)IIS部署发布

    2、通过VisualStudio把程序发布到指定文件夹中,下面将以通过.Net6框架开发的22-08-25-065_JsonTable(nopCommerce计划任务(ScheduleTasks)的定义实现)示例程序来详细讲述该程序是怎样被发布部署到IIS中的。

    Linux Shell Scripting Cookbook.epub

    Linux Shell Scripting Cookbook shows you how to capitalize on all the aspects of Linux using the shell scripting language. This book teaches you how to use commands to perform simple tasks all the way...

    Linux Shell Scripting Cookbook.mobi

    Linux Shell Scripting Cookbook shows you how to capitalize on all the aspects of Linux using the shell scripting language. This book teaches you how to use commands to perform simple tasks all the way...

    Hands-On Enterprise Automation with Python by Basim Aly 源码

    Hands-On Enterprise Automation with Python starts by covering the set up of a Python environment to perform automation tasks, as well as the modules, libraries, and tools you will be using. ...

    Django crontab定时任务模块操作方法解析

    这个模块使得开发者能够在Python环境中方便地管理周期性任务,而无需深入理解Linux的crontab系统。以下是对Django crontab的操作方法进行详细说明: ### 1. 安装 首先,你需要在你的Python环境中安装`django-...

    Hands-On Enterprise Automation with Python by Basim Aly pdf

    Hands-On Enterprise Automation with Python starts by covering the set up of a Python environment to perform automation tasks, as well as the modules, libraries, and tools you will be using. ...

    Hands-On Enterprise Automation with Python by Basim Aly epub

    Hands-On Enterprise Automation with Python starts by covering the set up of a Python environment to perform automation tasks, as well as the modules, libraries, and tools you will be using. ...

    Linux Phrasebook

    Skipping the usual tutorial on Linux, the Linux Phrasebook goes straight to practical Linux uses, providing immediate applicable solutions for day-to-day tasks. It includes code phrases that allow ...

    Mastering Linux Shell Scripting

    Shell scripting is a quick method to prototype a complex application or a problem by automating tasks when working on Linux-based systems. Using both simple one-line commands and command sequences ...

    Linux Shell Scripting Cookbook - Third Edition

    Packed with easy-to-follow recipes on new features on Linux, particularly, Debian-based, to help you accomplish even the most complex tasks with ease Who This Book Is For If you are a beginner or an...

    Beginning Ubuntu Linux Part1

    You’ll learn how to install software, manage users, optimize your system, back up essential data, schedule tasks, and access computers remotely. Finally, at the back of the book, you’ll find four ...

    Beginning Ubuntu Linux Part2

    You’ll learn how to install software, manage users, optimize your system, back up essential data, schedule tasks, and access computers remotely. Finally, at the back of the book, you’ll find four ...

    Linux Shell Scripting Essentials(PACKT,2015)

    Shell scripts are a collection of commands to automate tasks, usually those for which the user has a repeated need, when working on Linux-based systems. Using simple commands or a combination of them...

    Linux Shell Scripting Cookbook

    to-follow recipes on new features on Linux, particularly, Debian-based, to help you accomplish even the most complex tasks with ease, Who This Book Is For, If you are a beginner or an intermediate ...

Global site tag (gtag.js) - Google Analytics