【问题标题】:Cannot run perforce from crontab无法从 crontab 运行 perforce
【发布时间】:2016-09-16 19:27:57
【问题描述】:

我正在尝试从 crontab 执行与 perforce 一起使用的 perl 脚本。这是我的 perl 代码:

print `/usr/local/bin/p4 filelog /projects/config.json`;

我收到错误:

Perforce client error:
    Connect to server failed; check $P4PORT.
    TCP connect to perforce:1666 failed.
    Name or service not known

相同的命令在 cli 中运行顺利。有什么想法我可以用它做什么?

【问题讨论】:

    标签: perl cron crontab perforce cron-task


    【解决方案1】:

    这是因为您没有在您的 cron 环境中设置 P4CONFIG(或替代)环境变量。您只需复制交互式 shell 中的环境变量(可能使用set | grep ^P4 来确定它们是什么)。

    查找有关设置环境变量here 的更多详细信息。

    【讨论】:

    • 我在命令中添加了 P4PORT,但仍然遇到同样的错误。这是我的 cron 行:46 4 * * * P4PORT=ss-5:1666 PERL5LIB=/lib /tmp/test >> /tmp/cronoutput 2>&1
    • 我认为这是不言而喻的,但您只需复制您在交互式环境中的 P4 环境变量 (set | grep ^P4)。不应该有任何猜测!
    【解决方案2】:

    我发现解决方案是在 perl 代码中设置环境变量:

        $ENV{'P4PORT'} = '...';
        $ENV{'P4CLIENT'} = '...';
        $ENV{'P4USER'} = '...';
        $ENV{'P4PASSWD'} = '...';
    

    【讨论】:

    • 设置这些环境变量是现有答案指示您执行的操作。然而。它建议将它们设置在 crontab 文件中,这比在脚本中硬编码配置数据要好得多。这是一个糟糕的解决方案。
    • @ikegami,现有解决方案没有解释如何在 crontab 文件中准确设置它们。如果您可以添加此信息,那将有很大帮助。谢谢。
    • 如果您在阅读文档 (man 5 crontab) 后无法确定如何在 crontab 中设置变量,请随时提出相关问题。您也可以要求 shell 设置它们 (VAR=val command)。
    • @ikegami,我相信,stackoverflow 的目标是为人们的问题提供有针对性和完整的答案,即使答案可以在文档中找到。
    • 确实如此。这就是为什么我说你应该随时问这个问题。其实已经是asked了。
    猜你喜欢
    • 2015-07-09
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 2020-05-24
    • 2016-10-20
    • 2016-03-06
    • 2013-02-23
    • 2013-10-22
    相关资源
    最近更新 更多