2016-09-14 23 views
0

關於我的系統的基本信息:我有一個音樂系統,人們可以安排歌曲在特定時間開始和結束。如何在特定時間範圍內激活一次cron命令?

操作系統:Arch linux

它設置了兩個crons。我們可以在1.50(開始時間用「play etc」之類的命令)和另一個設置爲3.20(結束時間用像「end etc」之類的命令)。

我的設置完美,我可以結束刪除時間表等等,但我現在注意到一個問題!如果我設置了上述時間並關閉系統(我的系統是覆盆子pi),然後再打開讓我們說2.00,我錯過了1.50截止日期,音樂並沒有啓動(顯然),我想嘗試使它不那麼問題是什麼時候我在一個範圍內打開它可以說:1.50 - 3.20它將開始播放命令。但它會運行一次命令!

我環顧四周,我得到的命令是這樣的:

0 1.50-3.20/2 * * * your_command.sh 

但那運行每2小時。我希望它只在這些時間之間運行一次? 謝謝!

回答

0

我通過創建一個PHP文件解決了這個問題,並在重新啓動時加載頁面,然後完成它的工作並重定向回到如此這般。

1

您可以添加一個額外的cron作業,在每次重新啓動時啓動腳本。舉例來說,你可以像這樣的行添加到你的crontab:

@reboot /home/pi/startplayback.sh 

你startplayback.sh腳本應該檢查是否當前時間是需要的期限內和運行所需的命令,如果它是。例如下面的代碼將打印播放!如果腳本在1:50和3:20之間運行。你可以替換echo'PLAY!'通過運行WHATEVER

#!/bin/bash 

current=$(date '+%H%M') 
((current=(10#$current))) 
((current > 150 && current < 320)) && echo 'PLAY!' 

附:不要忘記讓你的腳本可執行sudo chmod +x startplayback.sh

1

你可能想看看the at command及其實用程序。

SYNOPSIS 
    at [-q queue] [-f file] [-mldbv] time 
    at [-q queue] [-f file] [-mldbv] -t [[CC]YY]MMDDhhmm[.SS] 
    at -c job [job ...] 
    at -l [job ...] 
    at -l -q queue 
    at -r job [job ...] 

    atq [-q queue] [-v] 

    atrm job [job ...] 

    batch [-q queue] [-f file] [-mv] [time] 

at有利於在未來的某個點上運行調度一次工作。它維護着這些作業的隊列,所以你可以用它來安排各種不同的時間規格。

克倫在我看來是一個調度員的工作,要重複一遍又一遍。

所以對於你一個快速和骯髒的例子:

echo 'ls -lathF' | at now + 1 minute 

正如預期的那樣,你會看到一個工作,在一分鐘內運行。嘗試atq來查看作業列表。

作業完成後,輸出將默認郵寄給您的用戶。

相關問題