在shell脚本中使用ssh login在服务器上创建cron条目

在shell脚本中使用ssh login在服务器上创建cron条目

问题描述:

我需要将文件(bash脚本)上载到远程服务器。我使用scp命令。将文件复制到远程服务器后,我想在远程服务器上的crontab文件中创建一个cron条目。 但是,文件上传和写入cron条目需要在bash shell脚本中进行,这样我只需要在本地机器上执行脚本,并将脚本复制到远程主机,并将cron条目写入crontab 。在shell脚本中使用ssh login在服务器上创建cron条目

有没有一种方法可以在脚本中使用ssh命令将我登录到远程服务器,打开crontab文件并写入cron条目。

任何帮助是非常欢迎

你的意思是这样

ssh [email protected] && echo "* * * * * /path/to/script/" >> /etc/crontab 

+0

回声和重定向到本地创建/ etc/crontab中的SSH登录成功退出后只发生。并不是OP要求的。 – kmarsh 2016-07-14 17:08:00

mailo看起来几乎是正确的,但该命令将是第二个参数的ssh命令,就像这样:

ssh [email protected] 'echo "* * * * * /path/to/script/" >> /etc/crontab' 

或者,如果你的系统不会自动加载/ etc/crontab中,你应该能够管crontab命令是这样的:

​​

我想:

  1. 提取用户与的crontab
  2. 修改该文件与所需的作业
  3. 导入新的crontab与crontab somefile
+0

这是一个魅力!谢谢! – 2017-07-05 12:33:59

说要$local复制到$remote$host并添加小时工有14过去每隔一小时运行,使用单个SSH会话;

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

这显然可以更强大的适当的错误检查等,但希望它至少应该让你开始。

这里的两个键是ssh命令接受一个任意复杂的shell脚本作为远程命令,并从本地主机获取其标准输入。所有变量都会在本地主机上插入;因此在远程主机上执行的命令将类似于cat >'/path/to/remote' && chmod +x '/path/to/remote' && ...使用单引号,可以在文件名中留有空格,但是我没有把它们放在crontab条目中,因为它很奇怪,如果你还需要单引号,我相信它应该可以工作。)

我只是做了这样的事情,我需要创建一个多行的crontab在远程机器上。到目前为止最简单的解决方案是管通过ssh内容到远程crontab命令是这样的:

echo "$CRON_CONTENTS" | ssh [email protected] crontab