Как использовать s sh для планирования задания 'at' или 'cron job' на сервере linux из программы python на клиенте Windows - PullRequest
0 голосов
/ 02 августа 2020

Я пытаюсь запланировать выполнение задания на сервере linux из приложения python на Windows 10 с помощью os.system (). Следующий код выполняется, но не может запланировать задание.

os.system('ssh myadmin@mnop.com "at 09:00 {}".format("iostat > /home/myadmin/t.txt")')
os.system('ssh myadmin@mnop.com  "crontab 0 9 9 1 * /home/myadmin.msg.sh"')

Моя цель - запланировать одноразовое выполнение. Спасибо за предложение.

1 Ответ

0 голосов
/ 02 августа 2020

Единственный аргумент at - время; Затем он считывает команды со стандартного ввода. Аналогично, crontab считывает расписание cron из стандартного ввода, а не как параметры команды.

import subprocess

subprocess.run(['ssh', 'myadmin@mnop.com', 'at 09:00'],
    text=True, check=True,
    input="iostat > /home/myadmin/t.txt\n")
subprocess.run(['ssh', 'myadmin@mnop.com', 'crontab'],
    text=True, check=True,
    input='0 9 9 1 * /home/myadmin/msg.sh\n')

Обратите внимание, что последний заменит любой существующий crontab для пользователя. Я исправил опечатку, на которую вы указали в комментарии.

Обратите внимание, как мы переключаемся на subprocess.run вместо os.system, как рекомендовано в документации для последнего. Я сделал рефакторинг, чтобы не использовать shell=True; возможно, см. также Фактическое значение 'shell = True' в подпроцессе

...