如何从Bash打开crontab并向cron添加注释?

时间:2017-11-07 05:23:17

标签: node.js bash ssh cron

目前这是我们的方案。

  1. SSH进入节点1
  2. sudo crontab -e
  3. 将此* * * * * /rsync.sh >>/dev/null 2>&1更改为#* * * * * /rsync.sh >>/dev/null 2>&1
  4. cd /var/www/www.site.com/public_html /
  5. npm run prod
  6. 等待npm成功
  7. sudo crontab -e
  8. 将此#* * * * * /rsync.sh >>/dev/null 2>&1更改为* * * * * /rsync.sh >>/dev/null 2>&1
  9. 退出SSH
  10. 因此,每次我们部署时,我们都会在crontab中添加或删除注释,然后添加或删除#。这很耗时,所以我写了这个脚本。

    我只有一条cron线。

    (我不是bash专家)

    #!/bin/bash
    
    START_TIME=`date +%s`
    
    # turn off rsync by deleting cron (from root user)
    crontab -e -u root
    
    # deploy to production node 1
    npm run prod
    sudo service varnish restart
    END_TIME=`date +%s`
    
    # turn on rsync by making the cron again
    crontab -e -u root | { cat; echo "* * * * * /root/scripts/sync.sh >>/dev/null 2>&1"; } | crontab -
    
    echo -e ""
    

    这不起作用,因为它不是添加一行,也不是找到并删除我想要的代码。有人帮忙吗?

    我收到此错误:

    no crontab for root - using an empty one Vim: Warning: Output is not to a terminal它会挂起..

2 个答案:

答案 0 :(得分:2)

按照@Jeff Richards的建议使用/etc/cron.d

/etc/cron.d中的文件不需要使用crontab命令进行更新。

#!/bin/bash

set -uex

START_TIME=$(date +%s)

# turn off rsync by deleting cron
sudo rm /etc/cron.d/www.site.com_sync

# deploy to production node 1
cd /var/www/www.site.com/public_html/
npm run prod
service varnish restart

END_TIME=$(date +%s)

# turn on rsync by making the cron again
echo '* * * * *  root  /root/scripts/sync.sh >>/dev/null 2>&1' | sudo tee /etc/cron.d/www.site.com_sync

答案 1 :(得分:0)

这是我为未来人们使用的解决方案

#!/bin/bash
## DELETE THE RYSYNC COMMAND
sudo crontab -r -u root
( cd app/src ; gulp static-builder )
npm run prod
## RESTART VARNISH
sudo service varnish restart
## START THE RYSYNC COMMAND
(sudo crontab -u root -l; echo "* * * * * /root/scripts/sync.sh >>/dev/null 2>&1") | sudo crontab -u root -

我不推荐与其他人的命令建议相比;但是现在,我们将使用它。

我完全删除了该用户的cron。然后我在部署到生产后再次编写该行。