linux 利用 cron 实现 程序开机启动/cron任务的多种实现方法/cron重启/cron日志开启


方法一、登录服务器,直接修改:

  crontab -e
  然后添加:
    @reboot [nohup] {命令}

    ...
    # 或者定时任务指令

  保存退出:
    ctrl + O 
    ctrl + x


方法二、指定用户进行修改:
  sudo crontab -u {username} -e
  然后添加:
    @reboot [nohup] {命令}

    ...
    # 或者定时任务指令

  保存退出:
    ctrl + O 
    ctrl + x


以上两种方法,可以提前将 任务指令 封装进一个文件,然后再统一导入: sudo crontab -u {username} {filename}
务必注意,用导入文件的形式添加定时任务,会进行覆盖重写操作(先清空已有定时任务,再从文件中导入)
解决办法:https://www.cnblogs.com/lowmanisbusy/p/12048054.html


方法三、修改 /etc/crontab:
  sudo vim /etc/crontab
  添加:
    @reboot {username} [nohup] {命令}

    ...
    # 或者定时任务指令

  保存退出


  该方法必须指定用户,该方法的好处是,可以将所有用户的crontab任务都在/etc/crontab文件中进行管理
  (方法一和方法二会为用户单独维护一份crontab任务文件,不方便管理人员统一管理所有定时任务)
  
  该方法本人在实际的操作过程中,无法通过远程发送指令的方式完成,必须需要打开一个交互式的shell窗口,手动修改.这里应该有权限限制

说明:
  1. nohup 是用来让运行的程序忽略 SIGHUP 指令(因为在父程序退出后,所有的子程序会受到 SIGHUP 指令)从而保证运行的程序不退出, 根据实际情况决定是否使用该参数
  (本人实际操作过程中,加入该参数时无法成功执行任务,请自测)
  2. @reboot 只针对可登录服务器的用户生效, 如果使用不可登录服务器的用户执行该类型crontab任务,将会遭到忽略,执行失败

注意:
  1.如果修改了服务器的时区或时间,必须将cron服务重启,否则仍然会按照原来的时区及时间执行定时任务
    sudo -s
    启动cron:/etc/init.d/cron start 或者 service cron start
    重启:/etc/init.d/cron restart ( service cron restart )
    关闭:/etc/init.d/cron stop ( service cron stop )

  2.默认情况下,cron 服务的日志是关闭的,如果需要开启 cron 日志,可以执行以下步骤(本人操作环境 ubuntu 16.04)
    sudo vim /etc/rsyslog.d/50-default.conf
    
    找到以下行,将注释取消即可
      # cron.*  /var/log/cron.log

    重启 rsyslog:
      sudo  service rsyslog  restart

    重启 cron:
      sudo service cron restart

    查看日志:
      tail -f /var/log/cron.log
      


原文地址:https://www.cnblogs.com/lowmanisbusy/p/11557802.html