Перейти к содержанию

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

Telegram сайта  "Типичный социум"

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

img.png

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

Обжалование или подача апелляции на снятие Бана в группе "Типичный Социум IT!
Заявки и обжалование отправлять в Телеграм bot @ModeratorTS_Bot


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

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

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

Write what you are looking for and press enter or click the search icon to begin your search

-->