而linux cron命令是專門爲定期運行命令,而在命令一次運行的工作,雖然也可以使用如果該命令重新提交,則反覆運行命令。我不知道配置一個cron條目只能執行一次的正常方法,並且找不到任何可能的文檔。通過執行'crontab -e'來編輯crontab文件,然後在編輯器中刪除作業的條目,或者使用'crontab </crontab文件覆蓋crontab文件中的所有內容, dev/null'或者完全用'crontab -r'去除crontab文件。
考慮到這一點,導致我發明了自毀cron作業,它是這樣的。假設你使用用戶名'adhawan'來配置一個cron作業。所有這一切,使工作自毀需要的是使用出發,按照作業的腳本中的最後聲明:
crontab -r
這將刪除你的crontab文件,並應工作,因爲你的個人cron作業,你運行。我用下面的工作嘗試它和它的工作如預期 - 跑一次,然後刪除自身!:
* * * * * echo hello > /var/tmp/cron1; crontab -r
如前所述,在Linux/Unix的實用程序提供了在計劃的時間運行一次的東西的一種手段。時間被稱爲timepec(時間分類)。例如,要安排工作,早上6點明天只運行一次,下面的timespec可以用來
6 am tomorrow
或在上午6點到做它在9月18日可用於
6am Sep 18
以下
或指定年份
6 am 9/18/2015
at的timespec語法非常靈活。使用最近的術語,它可以被稱爲DSL(領域特定語言)。它是用YACC(另一個編譯器編譯器)實現的,它的語法縮減版本可以在其通常安裝在/ usr/share/doc/at */timespec的timespec文件中看到,在線有它的副本Abbreviated version of the yacc grammar used by at(1)。
at可以從文件運行提供的工作,提供它的執行與-f選項或從標準輸入。例如從名爲atjob文件:
at -f atjob 6 am Sep 18
或與重定向標準輸入從文件:
at 6 am Sep 18 < atjob
或從管道標準輸入:
cat atjob | at 6 am 9/18
嘗試使用在自命令行首先在不久的將來安排一個命令,就像現在或者一分鐘一樣,所以你可以看到它是否工作,並且用一個非常簡單的命令產生一些可觀察的命令,例如新文件。例如,第一個測試工作可以是'echo hello>/tmp/atfile01',並且可以像這樣提交作業的第一個測試:
echo「echo hello>/tmp/atfile01」現在運行
運行後,檢查/ tmp/atfile01是否存在,以及它是否證明at系統在運行。
然後嘗試SHEDULING工作到早上6點09月18運行(或幾天從現在開始,如果今天是年09月18或使用你的timespec)與
回聲「回聲你好>的/ tmp/atfile02」 |在09年9月18日
如果這沒有產生錯誤,那麼它的工作,它可以通過運行atq確認,看看它是否列出一個計劃爲YYYY-09-18 06:00的工作,其中YYYYY是如果今年的9/18已經過去了,那麼今年或明年將會如此。
現在您已經知道如何編寫和運行作業,並且使用atq從atrm隊列中刪除任何測試作業以列出作業(包括其ID),然後在ID上執行atrm會很好。例如,假設ID是2,第10和17 ATRM命令是:
atrm 2 10 17
現在修改你的工作的命令,以滿足您的用途和使用subprocess,sh或envoy從Python的執行它。使用suprocess的例子是Calling an external command in Python。
有關更多信息,您可以通過運行「man at」和Ubuntu的聯機幫助頁來查看其手冊頁,其格式爲at.1posix.html。
Thanks @heinst但是我想在早上6點運行一次,而不是每天早上6點運行一次。 – adhawan