linux 创建crontab文件位置,linux - 如何通过脚本创建crontab - Ubuntu问答
問題描述
我需要通過運行設置服務器的腳本來添加cron作業。我目前正在使用Ubuntu。我可以使用crontab -e,但這將打開一個編輯器來編輯當前的crontab。我想以編程方式執行此操作。
有可能這樣做嗎?
最佳回答
Cron作業通常存儲在/var/spool/cron下的per-user文件中
您要做的最簡單的事情可能就是創建一個配置了作業的文本文件,然后將其復制到cron spool文件夾中,并確保它具有正確的權限(600)。
次佳回答
這是一個one-liner,它不使用/不需要將新作業存儲在文件中:
(crontab -l 2>/dev/null; echo "*/5 * * * * /path/to/job -with args") | crontab -
2>/dev/null很重要,因此如果當前沒有crontab條目,您將不會收到某些* nix生成的no crontab for username消息。
第三種回答
對于用戶crontabs(包括root),您可以執行以下操作:
crontab -l -u user | cat - filename | crontab -u user -
其中名為”filename”的文件包含要追加的項目。您也可以使用sed或其他工具代替cat進行文本操作。您應該使用crontab命令,而不是直接修改文件。
類似的操作將是:
{ crontab -l -u user; echo 'crontab spec'; } | crontab -u user -
如果要修改或創建系統crontab,則可以像處理普通文本文件一樣對它們進行操作。它們存儲在/etc/cron.d,/etc/cron.hourly,/etc/cron.daily,/etc/cron.weekly,/etc/cron.monthly目錄以及文件/etc/crontab和/etc/anacrontab中。
第四種回答
在Ubuntu和許多其他發行版中,您可以將文件放入/etc/cron.d目錄,其中包含帶有有效crontab條目的一行。無需在現有文件中添加一行。
如果您只需要日常運行,只需將文件放入/etc/cron.daily即可。同樣,您也可以將文件拖放到/etc/cron.hourly,/etc/cron.monthly和/etc/cron.weekly中。
第五種回答
Crontab文件只是文本文件,因此可以像其他任何文本文件一樣對待。 crontab命令的目的是使crontab文件的編輯更加安全。通過此命令編輯后,將檢查文件是否有錯誤,并且僅在沒有文件的情況下保存文件。
crontab [path to file]可用于指定存儲在文件中的crontab。像crontab -e一樣,這只會在無錯誤的情況下安裝文件。
因此,腳本可以直接寫入cron選項卡文件,也可以將它們寫入臨時文件并使用crontab [path to temp file]命令加載它們。直接寫可以省去寫臨時文件的麻煩,但同時也避免了安全檢查。
第六種回答
對于您的問題,更簡單的答案是:
echo "0 1 * * * /root/test.sh" | tee -a /var/spool/cron/root
您可以在遠程服務器上設置cronjobs,如下所示:
#!/bin/bash
servers="srv1 srv2 srv3 srv4 srv5"
for i in $servers
do
echo "0 1 * * * /root/test.sh" | ssh $i " tee -a /var/spool/cron/root"
done
在Linux中,crontab文件的默認位置是/var/spool/cron/。在這里您可以找到所有用戶的crontab文件。您只需要將cronjob條目附加到相應用戶的文件即可。在上面的示例中,root用戶的crontab文件被追加了cronjob,以每天凌晨1點運行/root/test.sh。
第七種回答
作為對建議crontab -l | crontab -的建議的更正:并非在所有系統上都有效。例如,我不得不在數十臺運行舊版本SUSE的服務器上的根crontab中添加作業(不要問為什么)。舊的SUSE在crontab -l的輸出前加上注釋行,從而使crontab -l | crontab -不等冪(Debian在crontab聯機幫助頁中識別了此問題,并對其Vixie Cron版本進行了修補,以更改crontab -l的默認行為)。
要在crontab -l添加注釋的系統上以編程方式編輯crontab,可以嘗試以下操作:
EDITOR=cat crontab -e > old_crontab; cat old_crontab new_job | crontab -
EDITOR=cat告訴crontab使用cat作為編輯器(不是通常的默認vi),該編輯器不會更改文件,而是將其復制到stdout。如果crontab -期望輸入的格式與crontab -e輸出的格式不同,這可能仍然會失敗。不要嘗試將最終的crontab -替換為crontab -e-這將無法工作。
第八種回答
(我沒有足夠的聲譽來發表評論,所以我在這里添加一個答案:隨時在他的答案旁邊添加它作為評論)
Joe Casadonte’s one-liner非常完美,除非您使用set -e運行,即您的腳本設置為因錯誤而失敗,并且尚無cronjob。在這種情況下,one-liner將不會創建cronjob,但不會停止腳本。無聲的失敗可能會引起很大的誤導。
原因是crontab -l返回帶有1返回碼,導致不執行后續命令(echo)…因此未創建cronjob。但是由于它們是作為子進程執行的(由于括號),因此它們不會停止腳本。
(有趣的是,如果再次運行相同的命令,它將起作用:一旦執行了crontab -,crontab -l仍然不輸出任何內容,但不再返回錯誤(不再收到no crontab for 消息)。)隨后的echo被執行并創建了crontab)
無論如何,如果使用set -e運行,則該行必須為:
(crontab -l 2>/dev/null || true; echo "*/5 * * * * /path/to/job -with args") | crontab -
第九種回答
那么/etc/crontab只是一個ascii文件,所以最簡單的就是
echo "*/15 * * * * root date" >> /etc/crontab
每15分鐘就會發送一封電子郵件給您。調整口味,并通過grep或其他方式進行測試,是否已添加該行以使您的腳本具有冪等性。
在Ubuntu等上,您還可以將文件拖放到/etc/cron.*中,這更易于執行和測試—而且您不會弄亂/etc/crontab之類的(系統)配置文件。
參考資料
總結
以上是生活随笔為你收集整理的linux 创建crontab文件位置,linux - 如何通过脚本创建crontab - Ubuntu问答的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux内核的中断上下文,Linux操
- 下一篇: docker新建Linux虚拟机,RHE