Jump to content

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

Featured Replies

Posted
  • Admin
comment_7013

Удаление файла на сервере в заданное время, когда сервер выключен, требует установки задачи на удаление файла на сервере до его выключения. Это может быть достигнуто с помощью использования операционной системы для установки задачи планировщика на удаление файла в заданное время. Вот пример кода на 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.

Telegram site  "Typical society"

We don’t debug code — we debug reality

Do not be indifferent. Support for motivation to continue on to engage in this further!

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Privacy Policy