如何使用Python编辑远程UNIX服务器中存在的crontab文件

时间:2017-10-04 11:48:04

标签: python unix cron paramiko

我的Python代码中有一个crontab条目,用于描述应在指定时间在UNIX远程服务器中调度哪个脚本。

我正在编写一个Python脚本,它将使用Paramiko连接到ssh,它将转到远程服务器中指定的crontab文件路径 - >打开crontab文件 - >添加在文件末尾的Python脚本中指定的crontab条目(在新行上) - >保存&退出crontab文件。

请告诉我如何实现这一目标。

P.S。 :我已经知道如何使用Paramiko连接到服务器。刚刚停留在远程服务器的文件处理部分。

2 个答案:

答案 0 :(得分:0)

我不知道Paramiko究竟是如何工作的,但如果你可以使用shell,你可以简单地执行:

echo "new line" >> cron_file

此命令会将字符串new line添加为文件cron_file的新行。

答案 1 :(得分:0)

crontab -l 2>/dev/null| cat - <(echo "your new crontab entry here") | crontab -

说明

crontab -l

将当前的crontab输出到stdout。

2>/dev/null

[可选]抑制来自crontab -l的错误消息。如果用户没有crontab条目,您将收到错误消息。但这不是问题。

cat - <(echo "your crontab entry here")

-从管道(crontab -l)获取输入并将其用作cat的第一件事。然后其余的将新的crontab条目附加到stdout。 <()语法获取命令的输出并将其存储在临时文件中。

crontab -

这会将crontab条目设置为stdin(由于管道,它是以前命令中的所有stdout。)

编辑:看起来你需要用bash -c包装命令才能让管道正常工作。请参阅此stackoverflow entry

或者,您可以向paramiko发送一系列命令。只要注意并发性。

crontab -l > /tmp/current.cron
echo "your crontab entry here" >> /tmp/current.cron
crontab /tmp/current.cron

另一种选择是:

crontab <(cat <(crontab -l 2>/dev/null) <(echo "your new crontab entry"))