首页 > 系统相关 >Schedule tasks on Linux using crontab

Schedule tasks on Linux using crontab

时间:2023-09-14 12:05:05浏览次数:41  
标签:execute tasks output script crontab month every Linux using



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.

[b]Crontab[/b]
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




[b]Scheduling explained[/b]


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)



[color=green]Execute every minute[/color]



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.


[color=green]Execute every Friday 1AM[/color]



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)



[color=green]Execute on workdays 1AM[/color]



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)



[color=green]Execute 10 past after every hour on the 1st of every month[/color]



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.



[b]Neat scheduling tricks[/b]


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? ;)



[b]Special words[/b]


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



[b]Explained[/b]


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




[b]Mailing the crontab output[/b]


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="[email protected]"



[b]Mailing the crontab output of just one cronjob[/b]


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" [email protected]




[b]Trashing the crontab output[/b]


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.


标签:execute,tasks,output,script,crontab,month,every,Linux,using
From: https://blog.51cto.com/u_16261339/7468611

相关文章

  • 正点 Linux C mqtt 项目技能点(测试然也物联)
    ①、开发板自带驱动的外设文件:1.LED:/sys/class/leds/sys-led/brightness调节亮度。2.CPU温度:/sys/class/thermal/thermal_zone0/temp,读取内容转换成浮点数除以1000就是当前的摄氏温度。 ②、然也物联测试:1.如果没有社区版mqtt账号,可以用免费版:地址为#defineBROKER......
  • linux下端口被占用及解除方法
    linux下端口被占用及解除方法1、查看端口是否被占用:netstat-anp|grep8888//查看8888端口的占用情况出现如下情况说明被占用:2、查看占用此端口的进程PIDlsof-i:2001结果如下:3、杀死进程kill-94110#4110为进程ID至此端口已解除占用啦......
  • 一同走进Linux的“基操”世界
    众所周知,Linux是一个开源、免费的操作系统,其稳定性、安全性、处理多并发能力已经得到业界的认可,可以说,Linux现在就像是一个“当红明星”,其实力赢得了大多数人的赞同,流量也是不容小觑哦!在全球的服务器市场又有着非常高的份额占比,让它在同行的竞争中脱颖而出。于是,越来越多的人选择......
  • Linux安装weblogic
    一、WebLogic下载直接进入Oracle的WebLogicServer下载页面:https://www.oracle.com/technetwork/middleware/weblogic/downloads/index.html进入Downloads界面之后,选择下载文件为GenericInstaller,然后点击DownloadFIle:注意:(1)别忘记点击上面的“同意”条款。(2)点击下拉......
  • 在Linux上使用netstat命令查证DDOS攻击的方法
    服务器出现缓慢的状况可能由很多事情导致,比如错误的配置,脚本和差的硬件。但是有时候它可能因为有人对你的服务器用DoS或者DDoS进行洪水攻击。DoS攻击或者DDoS攻击是试图让机器或者网络资源不可用的攻击。这种攻击的攻击目标网站或者服务通常是托管在高防服务器比如银行,信用卡支......
  • 一同走进Linux的“基操”世界
    众所周知,Linux是一个开源、免费的操作系统,其稳定性、安全性、处理多并发能力已经得到业界的认可,可以说,Linux现在就像是一个“当红明星”,其实力赢得了大多数人的赞同,流量也是不容小觑哦!在全球的服务器市场又有着非常高的份额占比,让它在同行的竞争中脱颖而出。于是,越来越多的人选择......
  • Linux内核之堆溢出的利用
    前言用户进程会通过malloc等函数进行动态内存分配相应的内核也有一套动态的内存分配机制。内核中的内存分配有两种类型的计算机并且使用不同的方法管理物理内存UMA计算机:每个处理器访问内存的速度一直NUMA计算机:每个处理器访问自己的本地内存速度较快,但是访问其他处理器......
  • linux中普通用户如何防止重要文件被意外删除
     001、[liujiaxin01@pc1~]$lstest01[liujiaxin01@pc1~]$pwd##普通用户家目录/home/liujiaxin01[liujiaxin01@pc1~]$tree##重要文件所在目录.└──test01└──import_file.txt1directory,1file[liujiaxin01@pc1~]$cp-rtest01/tes......
  • linux lsof神器
    转自:https://baijiahao.baidu.com/s?id=1599953889210092246&wfr=spider&for=pclsof(listopenfiles)是一个查看当前系统文件的工具。在linux环境下,任何事物都以文件的形式存在,用户通过文件不仅可以访问常规数据,还可以访问网络连接和硬件;如传输控制协议(TCP)和用户数据报协议(U......
  • Linux性能测试之unixbench
    原文链接:Linux性能测试之unixbench大家好,昨天为大家带来了一篇关于在Linux下性能测试的文章《性能测试之LTP》,今天继续为大家推荐系列工具之unixbench,本工具用于Linux中cpu系统的测试,详情请查看百度,这里不多赘述,本文主要用于演示如何使用此工具。本文使用unixbench5.1.3版,工具的获......