Создание записи cron на сервере с использованием ssh login в скрипте оболочки - PullRequest
4 голосов
/ 17 февраля 2011

Мне нужно загрузить файл (скрипт bash) на удаленный сервер. Я использую команду scp. После того, как файл был скопирован на удаленный сервер, я хочу создать запись cron в файле crontab на удаленном сервере. Тем не менее, загрузка файла и запись записи cron должны происходить в сценарии оболочки bash, так что мне нужно выполнять сценарий только на моем локальном компьютере, и сценарий копируется на удаленный хост, а запись cron записывается в crontab.

Есть ли способ использовать команду ssh в скрипте, которая регистрирует меня на удаленном сервере, открывает файл crontab и записывает запись cron.

Любая помощь приветствуется

Ответы [ 5 ]

8 голосов
/ 18 февраля 2011

Я хотел бы:

  1. извлечь пользовательский crontab с помощью crontab -l > somefile
  2. , изменить этот файл с желаемым заданием
  3. импортировать новый crontab с помощью crontab somefile
1 голос
/ 16 сентября 2013

Я только что сделал что-то вроде этого, где мне нужно было создать многострочный crontab на удаленной машине.Безусловно, самым простым решением было передать содержимое удаленной команде crontab через ssh следующим образом:

echo "$CRON_CONTENTS" | ssh username@server crontab 
0 голосов
/ 26 мая 2012

Скажем, вы хотите скопировать $local в $remote на $host и добавить туда почасовое задание для выполнения в 14 часов каждый час, используя один сеанс SSH;

ssh "$host" "cat >'$remote' && 
    chmod +x '$remote' && 
    ( crontab -l; 
      echo '14 * * * * $remote' ) | crontab" <"$local"

Это можеточевидно, будет гораздо более надежным при правильной проверке ошибок и т. д., но, надеюсь, это по крайней мере должно помочь вам начать работу.

Два ключа здесь заключаются в том, что команда ssh принимает произвольно сложный сценарий оболочки в качестве удаленной команды, иполучает стандартный ввод с локального хоста.

(С двойными кавычками вокруг скрипта все переменные будут интерполированы на локальном хосте; поэтому команда, выполняемая на удаленном хосте, будет выглядеть примерно так: cat >'/path/to/remote' && chmod +x '/path/to/remote' && ... Содиночные кавычки, в имени файла могут быть пробелы, но я не поместил их в запись crontab, потому что это так странно. Если вам нужны одинарные кавычки, я считаю, что это должно сработать.)

0 голосов
/ 18 февраля 2011

mailo казалось почти правильным, но команда будет вторым аргументом команды ssh, например:

ssh username@server 'echo "* * * * * /path/to/script/" >> /etc/crontab'

Или, если ваша система не загружает автоматически / etc / crontab, вы можете подключиться к команде crontab следующим образом:

ssh username@server 'echo "* * * * * myscript" | /usr/bin/crontab'
0 голосов
/ 17 февраля 2011

Вы имели в виду что-то вроде

ssh username@username.server.org && echo "* * * * * /path/to/script/" >> /etc/crontab

...