Из-за того, как cron выполняет свою обработку, я не уверен, что вы можете использовать cron самостоятельно для этого. Из справочной страницы cron(8) :
Затем утилита cron просыпается каждую минуту, проверяя все сохраненные crontabs, проверяя каждую команду, чтобы увидеть, должна ли она быть запущена в текущую минуту. При выполнении команд любой вывод отправляется по почте владельцу crontab (или пользователю, указанному в переменной окружения MAILTO в crontab, если таковой существует).
У Cron нет метода идентификации записей, которые он уже выполнил. Итак, вы могли бы сделать это:
* 16-23 * * 1-5 <script>
Но это просто скажет cron запускать этот скрипт каждую минуту с 16:00 до 23:59, пока работает cron. (Глядя на справочную страницу crontab (5) , я не думаю, что вы можете сделать «16-24» или «16-0».)
Итак, если вы хотите, чтобы что-то запускалось один раз с 16:00 до полуночи, я бы предложил, чтобы cron запускал скрипт каждые 15 минут, после 16:00:
*/4 16-23 * * 1-5 <script>
Затем, в сценарии, включите некоторый метод, чтобы определить, был ли сценарий уже запущен в тот день.