Перейти к содержанию
Типичный Социум

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