我在 AWS 上的應用程式部署管道的一部分包括一個更新 hosts CRON 檔案的 bash 腳本,此外還以用戶身份運行 ruby?? 安裝
sudo -u myuser bash << eof
echo 'running bundle install'
/home/myuser/.rvm/gems/ruby-2.4.1/wrappers/bundle install
echo 'install cron tasks'
(crontab -l 2>/dev/null; echo "TZ=America/Los_Angeles")| crontab -
(crontab -l 2>/dev/null; echo "CRON_TZ=America/Los_Angeles")| crontab -
(crontab -l 2>/dev/null; echo "00 13 * * * /bin/bash /var/www/application/bin/daily-notifications.sh")| crontab -
crontab -l
eof
不幸的是,為了更新我的 AMI 映像,我需要先手動進入我的 crontab 檔案并在拍攝新的作業系統映像之前先洗掉 cron 任務,因為上面的代碼是將每一行“附加”到現有的末尾檔案
是否可以在上面的 bash 腳本中以編程方式清除 cron 任務?
uj5u.com熱心網友回復:
與其洗掉 crontab 檔案,然后運行一個腳本來追加它(注意:整個crontab -l 2>/dev/null; ...位都在那里追加而不是替換),為什么不重寫腳本直接替換它呢?
sudo -u myuser bash << OuterEOF
echo 'running bundle install'
/home/myuser/.rvm/gems/ruby-2.4.1/wrappers/bundle install
echo 'install cron tasks'
crontab - << InnerEOF
TZ=America/Los_Angeles
CRON_TZ=America/Los_Angeles
00 13 * * * /bin/bash /var/www/application/bin/daily-notifications.sh
InnerEOF
crontab -l
OuterEOF
請注意,此方法涉及此處檔案中的此處檔案,因此請確保使用不同的分隔符(并且不要縮進它們,否則它們將無法識別)。如果您不喜歡這樣,還有許多其他方法可以將多行發送到crontab -命令,例如printf:
...
printf '%s\n' \
"TZ=America/Los_Angeles" \
"CRON_TZ=America/Los_Angeles" \
"00 13 * * * /bin/bash /var/www/application/bin/daily-notifications.sh" |
crontab -
...
uj5u.com熱心網友回復:
是的,根據crontab 聯機幫助頁:
SYNOPSIS
crontab [ -u user ] file
crontab [ -u user ] [ -i ] { -e | -l | -r }
DESCRIPTION
[...]
The -r option causes the current crontab to be removed.
所以你會使用命令crontab -r
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/427342.html
