2.4.3 周期运行:cron
启动脚本一般是为守护进程这样需要一直保持运行状态的进程所设计的,对于其他一些周期性运行的进程(比如家务管理),要使用cron系统来进行更好的管理。cron会在/etc目录下寻找自己的配置文件,然后根据这些配置文件来工作。那么应该如何寻找对应的配置文件呢?这时就要用到locate命令了。locate命令在系统上默认是不会安装的,所以要先安装locate命令:
$ sudo apt-get install mlocate
然后输入命令:
$ sudo updatedb
接下来通过locate命令寻找配置文件:
$ locate cron-
locate命令是通过自己存储的文件数据库来工作的,这个数据库每天会通过cron来完成周期性的更新。如果你想要手动更新这个数据库,只需要输入命令“sudo updated”即可。
find命令与locate命令具有类似的功能。find命令允许你通过文件的文件名、大小以及修改时间来在某个文件夹或者是整个文件系统下寻找文件。find命令有很复杂的功能,比如具有locate并不支持的正则表达式。同时由于它是直接通过文件系统寻找文件的(相比之下locate通过一个缓存的数据库来寻找文件),所以它一般耗时会更久一些。如果你想要使用find命令来完成以上用locate命令完成的任务,就可以输入:
$ find / -name '*cron*'
在搜索结果中会出现anacron相关的文件。如果你不希望搜索到这些文件,那么可以使用正则表达式‘cron*’。find命令一般会有大量的输出,所以最好把输出信息通过管道重定向到其他命令里去。
在系统上使用cron可以通过crontab命令。输入“crontab –e”命令后就可以编辑对应的cron配置文件了。下面来看一个示例。
45 05 * * 1-5 calendar | mail -s 'Your calendar' me@myemailaddress.com
这条命令的意思是在每天上午发送对应的日历信息到你的邮箱。前5个参数与命令执行的周期相关,可以用@daily或者@hourly来代替。如果想了解更多有关crontab的信息,你可以输入“man 5 crontab”来查看帮助文档。
在运行上面的命令时,系统可能会提示你mail并没有被安装,那么你需要先安装一个邮件软件,比如说ssmtp。
提示
正则表达式:find命令支持在查找时使用正则表达式。正则表达式是一个非常大的主题,这里就不详细介绍了。作为一项广泛应用的技术,它非常值得学习。一些用户不希望使用Systemd的启动方式,可以使用操作系统提供的其他选择。对于Ubuntu,你可以使用Upstart。对于Raspbian,你可以使用Devuan发行版,它使用的是经典的Sys-V启动。