Использование Linux 'at' для планирования заданий через C ++ - PullRequest
1 голос
/ 24 мая 2011

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

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

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 24 мая 2011

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

0 голосов
/ 28 мая 2011

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

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

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

system("at -f test.py '18:30' today");
0 голосов
/ 24 мая 2011

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

...