crontab 的@reboot 僅適用於root?
man 5 crontab
關於如何使用 crontab 在啟動時執行腳本非常清楚:These special time specification "nicknames" are supported, which replace the 5 initial time and date fields, and are prefixed by the `@` character: @reboot : Run once after reboot.
所以我很高興地在我的 crontab 中添加了一行(在我的使用者帳戶下,而不是 root 下):
@reboot /home/me/myscript.sh
但由於某種原因,myscript.sh 不會在機器重新啟動時執行。(如果我從命令行呼叫它執行良好,所以這不是權限問題)
我錯過了什麼?
更新以回答@Anthon 的問題:
- Oracle-linux 版本:5.8(uname:2.6.32-300.39.2.el5uek #1 SMP)
- cron 版本:vixie-cron-4.1-81.el5.x86_64
- 是的,
/home
是一個掛載的分區。看起來這就是問題所在。我該如何解決這個問題?- 目前,
myscript.sh
僅將文本消息回顯到/home/me
.
這可能是一個令人困惑的話題,因為 cron 有不同的實現。還有幾個錯誤破壞了這個功能,還有一些案例根本無法工作,特別是如果您執行關機/啟動與重新啟動。
錯誤
數據點 #1
此處介紹了 Debian 中的一個此類錯誤,標題為:cron: @reboot jobs are not run。這似乎也進入了 Ubuntu,我無法直接確認。
數據點 #2
在標題為: @reboot cronjob not execution的這個 SO Q&A 中似乎證實了 Ubuntu 中的錯誤的證據。
摘抄
評論 #1: …. 3) 你的 crond 版本可能不支持 @reboot 你在使用 vix 的 crond 嗎?… 顯示 crontab -l -u 使用者的結果
評論 #2: … 將其設置為 init 腳本而不是依賴特定版本的 cron 的 @reboot 可能是個好主意。
評論 #3: … @MarkRoberts 刪除了重新啟動並將 1 * * * * 修改為 */1 * * * * ,問題解決了!我在哪裡發送rep pts Mark?謝謝!
該問答中接受的答案也有以下評論:
在我看來,Lubuntu 不支持 @Reboot Cron 語法。
額外的證據
數據點 #3
作為額外的證據,有這個執行緒表明有人正在嘗試同樣的事情並且對它不起作用感到沮喪。它的標題是:Thread: Cron - @reboot jobs not working。
摘抄
回复:Cron - @reboot 作業不工作
> > Quote 最初由 ceallred 發表 View Post 這讓我很生氣… 嘗試了包裝腳本。手動執行會生成日誌文件…重新啟動並且作業不會執行或創建日誌文件。 > > > Syslog 顯示 CRON 執行了該作業……但同樣,沒有輸出並且程序沒有執行。7 月 15 日 20:07:45 RavenWing cron > > $$ 1026 $$: (CRON) INFO (Running @reboot jobs) Jul 15 20:07:45 RavenWing CRON$$ 1053 $$: (gellred) CMD (/home/ceallred/Scripts/run_spideroak.sh> /home/ceallred/Scripts/SpiderOak.log 2> & 1 &) > 似乎 cron 不喜歡 @reboot 命令….還有其他想法嗎? > > >
好的…部分解決了。我會將這個標記為已解決,並用新問題開始一個新執行緒…..
我認為答案是當 CRON 嘗試執行腳本(儲存在 /home/username/scripts 中)時,我的加密主目錄沒有掛載。移動到 /usr/scripts 並且作業按預期執行。
所以現在它似乎是一個蜘蛛橡樹的問題。程序開始,但在引導過程完成時,它就消失了。我猜出於某種原因會崩潰……新執行緒要問這個問題。
感謝所有的幫助!
一旦上述使用者發現了他的問題,他就能夠
@reboot
從使用者的 crontab 條目中得到解決。我不完全確定在 Ubuntu 上使用了哪個版本的 cron,但這似乎表明使用者也可以使用
@reboot
,或者該錯誤已在後續版本的 cron 中修復。數據點 #4
我在 CentOS 6 上進行了以下測試,它工作正常。
例子
$ crontab -l @reboot echo "hi" > /home/sam/reboot.txt 2>&1
然後我重新啟動了系統。
$ sudo reboot
重啟後。
$ cat reboot.txt hi
帶走
- 系統和使用者 crontab 條目似乎都支持此功能。
- 您必須確保它在您的特定發行版和/或 cron 包版本中受支持/工作。
有關實際機制如何工作的更多資訊,
@reboot
我確實看到了這篇討論內部結構的部落格文章。它的標題是:@reboot - 解釋簡單的 cron 魔法。調試 crond
您可以
crond
通過在基於 RHEL/CentOS/Fedora 的發行版上的此配置文件中添加以下內容來提高詳細程度。$ more crond # Settings for the CRON daemon. # CRONDARGS= : any extra command-line startup arguments for crond CRONDARGS="-L 2"
有效級別為 0、1 或 2。要將此文件恢復為其預設日誌記錄級別,只需
"-L 2"
在完成調試情況後刪除 。