子流程.popen从crontab运行时似乎失败

2024-10-01 15:29:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在运行crontab中的一个脚本,它将只通过ssh和运行一个命令并将结果存储在一个文件中。在

似乎要失败的函数是subprocess.popen。在

下面是python函数:

def _executeSSHCommand(sshcommand,user,node):

    '''
    Simple function to execute an ssh command on a remote node.
    '''

    sshunixcmd = '/usr/bin/ssh %s@%s \'%s\'' % (user,node,sshcommand)
    process = subprocess.Popen([sshunixcmd],
                                shell=True,
                                stdout=subprocess.PIPE,
                                stderr=subprocess.PIPE)
    process.wait()
    result = process.stdout.readlines()
    return result

当它从命令行运行时,它会正确执行,从cron开始它似乎会失败,并显示以下错误消息。在

以下是crontab条目:

02 * * * * /home/matt/scripts/check-diskspace.py >> /home/matt/logs/disklog.log

错误如下:

^{pr2}$

我要瞎了眼,想找出我到底哪里做错了。有什么想法吗?在


Tags: 函数nodehome错误stdoutmattresultprocess
3条回答

对于python中与ssh相关的所有内容,您可以考虑使用paramiko。使用它,下面的代码应该可以做您想要的。在

import paramiko
client = paramiko.SSHClient()
client.load_system_host_keys()
client.connect(node, username=user)
stdout = client.exec_command(ssh_command)[0]
return stdout.readlines()

您可能需要向ssh传递-i参数,以告诉ssh使用特定的密钥文件。问题是您的环境没有设置为告诉ssh要使用哪个密钥。在

在这里使用python这一事实有点令人费解。在

cron路径非常有限。您应该设置ssh/usr/bin/ssh的绝对路径,或者将路径设置为crontab中的第一行。在

相关问题 更多 >

    热门问题