Перейти к содержанию
Типичный Социум
  • Совершенно свободно и бесплатно, Вы можете создавать свои Статьи, на различную тематику, делится опытом и знаниями с другими участниками и посетителями Типичного социума!
    Выделяйте свои Статьи, тегами и префиксами.
  • Удалить файл по крону на сервере в заданное время, когда сервер выключен, используя C++ или Python

    Удалить файл по крону на сервере в заданное время, когда сервер выключен, используя C++ или Python


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

    #include <iostream>
    #include <windows.h>
    #include <taskschd.h>
    #pragma comment(lib, "taskschd.lib")
    #pragma comment(lib, "comsupp.lib")
    
    using namespace std;
    
    int main()
    {
        // Определить время, когда нужно удалить файл (в данном примере - 21 марта 2023 года, 9:00 утра)
        SYSTEMTIME st = { 2023, 3, 0, 21, 9, 0, 0, 0 };
        FILETIME ft;
        SystemTimeToFileTime(&st, &ft);
    
        // Получить указатель на планировщик задач
        ITaskService* pService = nullptr;
        CoInitialize(nullptr);
        HRESULT hr = CoCreateInstance(CLSID_TaskScheduler, nullptr, CLSCTX_INPROC_SERVER, IID_ITaskService, (void**)&pService);
    
        if (FAILED(hr))
        {
            cout << "Ошибка создания экземпляра планировщика задач: " << hr << endl;
            return 1;
        }
    
        // Войти в планировщик задач с помощью учетных данных администратора
        hr = pService->Connect(_variant_t(), _variant_t(), _variant_t(), _variant_t());
    
        if (FAILED(hr))
        {
            cout << "Не удалось подключиться к планировщику задач: " << hr << endl;
            pService->Release();
            CoUninitialize();
            return 1;
        }
    
        // Создать экземпляр планировщика задач
        ITaskFolder* pRootFolder = nullptr;
        hr = pService->GetFolder(_bstr_t("\\"), &pRootFolder);
    
        if (FAILED(hr))
        {
            cout << "Ошибка получения корневого каталога планировщика задач: " << hr << endl;
            pService->Release();
            CoUninitialize();
            return 1;
        }
    
        // Создать новую задачу планировщика
        ITaskDefinition* pTask = nullptr;
        hr = pService->NewTask(0, &pTask);
    
        if (FAILED(hr))
        {
            cout << "Ошибка создания новой задачи планировщика задач: " << hr << endl;
            pRootFolder->Release();
            pService->Release();
            CoUninitialize();
            return 1;
        }
    
        // Установить параметры задачи планировщика
        pTask->put_Principal(_bstr_t(L""));
        IActionCollection* pActionCollection = nullptr;
        hr = pTask->get_Actions(&pActionCollection);
    
        if (FAILED(hr))
        {
            cout << "Ошибка получения коллекции действий задачи плани

     

     

    В Python можно использовать модуль win32com.client, чтобы работать с планировщиком задач Windows. Вот пример кода на Python, который устанавливает задачу планировщика на удаление файла в заданное время:

    import win32com.client
    import pythoncom
    
    def delete_file_task():
        # Определить время, когда нужно удалить файл (в данном примере - 21 марта 2023 года, 9:00 утра)
        delete_time = "2023-03-21T09:00:00"
    
        # Получить указатель на планировщик задач
        scheduler = win32com.client.Dispatch("Schedule.Service")
        scheduler.Connect()
    
        # Создать экземпляр планировщика задач
        root_folder = scheduler.GetFolder("\\")
    
        # Создать новую задачу планировщика
        task = scheduler.NewTask(0)
    
        # Установить параметры задачи планировщика
        task.RegistrationInfo.Description = "Удаление файла"
        task.Settings.Enabled = True
        task.Settings.AllowDemandStart = True
        task.Settings.StopIfGoingOnBatteries = False
        task.Settings.DisallowStartIfOnBatteries = False
        task.Settings.StartWhenAvailable = True
    
        # Установить действие для задачи планировщика
        action = task.Actions.Create(win32com.client.constants.task_action_exec)
        action.ID = "DeleteFileAction"
        action.Path = "cmd.exe"
        action.Arguments = "/c del C:\\path\\to\\file.txt"
        action.WorkingDirectory = "C:\\path\\to"
    
        # Установить триггер для задачи планировщика
        trigger = task.Triggers.Create(win32com.client.constants.task_trigger_time)
        trigger.StartBoundary = delete_time
    
        # Зарегистрировать задачу планировщика
        root_folder.RegisterTaskDefinition("DeleteFileTask", task)
    
    if __name__ == "__main__":
        pythoncom.CoInitialize()
        delete_file_task()
        pythoncom.CoUninitialize()

    Обратите внимание, что для работы с модулем win32com.client необходимо установить пакет pywin32.


    AndrewPro

    Обратная связь

    Рекомендуемые комментарии

    Комментариев нет



    Присоединяйтесь к обсуждению

    Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
    Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

    Гость
    К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
    Добавить комментарий...

    ×   Вставлено с форматированием.   Вставить как обычный текст

      Разрешено использовать не более 75 эмодзи.

    ×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

    ×   Ваш предыдущий контент был восстановлен.   Очистить редактор

    ×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.Политика конфиденциальности