Использование Linux 'at' для планирования заданий через C++

У меня есть программа на C++, которая должна планировать различные будущие процессы для запуска единовременно.

Разработка ведется на Linux, поэтому очевидным выбором является использование команды at; Мне не интересно писать свой собственный планировщик работы!

Однако я неохотно делаю процесс ОС из своей программы, чтобы напрямую вызывать исполняемый файл at - так как это грязно и громоздко.

Я знаю, что с помощью cron вы можете записывать задания в виде файлов в /etc/cron.d без необходимости переходить в crontab. Тем не менее, похоже, что нет такой возможности для "в".

Небольшое исследование привело меня к выводу, что я мог бы просто записывать файлы в /var/spool/cron/atjobs, используя формант axxxxxyyyyyyyy, где x = идентификатор задания и y = время шестнадцатеричной эпохи в минутах - но это вряд ли кажется в духе безопасности Linux или соглашения.... плюс формат имени файла не переносим во всех системах * nix, если я захочу использовать другую операционную систему.

Конечно, я мог бы использовать cron, но он не подходит для одноразовых работ, так что это не кажется мне хорошим решением. Также я не хочу брать источник этих инструментов и вносить необходимые изменения в мою программу - это тоже не совсем переносимо.

Поэтому мой вопрос: если я хочу запланировать выполнение будущих заданий на определенное время и дату для одного запуска, может ли кто-нибудь предложить программно "хороший" способ взаимодействия с "at" или демоном cron напрямую, без необходимости переходить к ОС на С ++.... или есть другой стандартный инструмент, который обеспечивает это?

3 ответа

Команда at кажется хорошим способом сделать что-то. Почему бы не написать грязный код и перейти к более важным вопросам.

Чистым способом c или C++ было бы проверить текущее время и посмотреть, истекло ли задание, когда вы разветвляете процесс и запускаете приложение (скорее всего, с системой).

Фил, я хотел бы предположить, что ваша собственная идея записать спецификации заданий непосредственно в каталог atjobs является наиболее элегантным программным способом достижения вашей цели. Это то, что команда "at" делает в любом случае (может использовать strace для отслеживания процесса "at", когда он ставит в очередь задание, требуются привилегии суперпользователя!).

На чем основано ваше мнение о том, что расположение каталога спулинга cron является переменным? По моему опыту, такие пути файловой системы обычно достаточно надежны. Единственное заметное отклонение от этого правила - это каталог "etc", который сильно зависит от системы, но только между системами redhat и debian.

Сказав все это, вы можете откусить довольно сложный кусок работы для сомнительного возврата этих усилий (особенно для формата файлов работы). Конечно, в качестве технического упражнения у него есть много достоинств, но если бы я занимался этим @work, я бы просто использовал вызов системной функции c.

system("at -f test.py '18:30' today");
Другие вопросы по тегам