Linux系统的ECS实例中,如何配置crontab定时任务及常见问题

本文介绍如何在Linux系统的ECS实例中配置crontab定时任务,以及配置定时任务中的常见问题和解决方案。

crontab定时任务

新建定时任务

  1. 远程连接ECS实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 执行如下命令,打开crontab定时任务编辑界面。

    crontab -e
  3. i键进入编辑模式。

  4. 添加定时任务,定时任务如下所示。

    5 * * * * /etc/cpu_monitor.sh  #开机后,每5分钟执行一次CPU监控脚本。
    30 21 * * * /usr/local/etc/rc.d/lighttpd restart  #每天的21:30重启Apache。
    45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart  #每月1、10、22日的4:45重启Apache。
  5. Esc键,输入:wq保存退出。

查看定时任务

执行crontab -l命令,查看已经配置的定时任务。

CPU监控脚本

如果返回no crontab for username信息,表示没有配置定时任务,

说明

username为您当前登录的用户。

no crontab

删除定时任务

  • 删除所有定时任务。

    执行如下命令,删除所有的定时任务。

    crontab -r
  • 删除具体的定时任务。

    1. 执行如下命令,打开crontab定时任务编辑界面。

      crontab -e
    2. i键进入编辑模式。

    3. 根据需要,在定时任务前加#号即可注释该定时任务。

      5 * * * * /etc/cpu_monitor.sh  #开机后,每5分钟执行一次CPU监控脚本。
      #30 21 * * * /usr/local/etc/rc.d/lighttpd restart  #每天的21:30重启Apache。
      #45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart   #每月的1、10、22日的4:45重启Apache。
    4. Esc键,输入:wq保存退出。

常见问题

非root用户,执行crontab命令时提示“You (*) are not allowed to use this program (crontab)”错误。

问题现象

使用非root用户执行crontab -lcrontab -e等命令时,出现如下错误信息。

You (****) are not allowed to use this program (crontab)

问题原因

该问题可能是因为crontab任务有权限控制,非root用户默认没有操作crontab的权限。

cron.allowcron.deny文件用于控制用户对crontab命令的访问。

  • cron.allow文件中的用户可以使用crontab命令。

  • cron.deny文件中的用户不能使用crontab命令。

解决方案

  1. 使用root用户远程连接ECS实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 分别执行如下命令,查看是否存在cron.allowcron.deny文件。

    find /etc/cron.allow
    find /etc/cron.deny

    cron.allowcron.deny文件是否存在与是否可以使用crontab命令的用户关系说明如下。

    cron.allow文件是否存在

    cron.deny文件是否存在

    有权限使用crontab的用户范围

    不存在

    不存在

    仅root用户可使用crontab命令。

    存在

    不存在

    仅cron.allow文件中的用户可使用crontab命令。

    不存在

    存在

    不在cron.deny文件中的用户都可以使用crontab命令。

    说明

    若cron.deny文件内容为空,则所有用户都可以使用crontab令。

    存在

    存在

    仅cron.allow文件中的用户可以使用crontab命令。

    说明

    cron.allow优先级高于cron.deny,此时cron.deny不起作用。

  3. 根据需要,编辑cron.allowcron.deny文件。

    • 如果不存在cron.allow文件,若cron.deny文件中存在非root用户的用户名,请删除该用户的用户名后,保存cron.deny

    • 如果存在cron.allow文件,将该非root用户添加到cron.allow文件中,保存cron.allow

  4. 执行如下命令,重启cron服务 。

    systemctl restart crond.service
  5. 切换到该非root用户,重新执行crontab命令,确保可以正常执行。

使用crontab -e创建定时任务失败,提示“command not found”错误。

问题现象

使用Linux系统的ECS实例中,执行crontab -e创建定时任务时执行失败,提示“command not found”错误。

执行cd /etc/crontab进入主目录,提示“No such file or directory”错误。

问题原因

该问题是因为crontab应用包未安装,或安装后程序文件损坏导致。

解决方案

  1. 远程连接ECS实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 执行如下命令,安装crontabs依赖包和crontabs包。

    yum install vixie-cron
    yum install crontabs
  3. 再次执行crontab -e命令,确认可以正常编辑新的计划任务。