通过crontab的Python子进程调用不起作用

时间:2018-11-23 09:21:10

标签: node.js python-3.x cron

我正在Raspberry Pi Zero W中使用python 3.6脚本,其中包含以下几行:

import subprocess

result = subprocess.run(['which', 'node'],
                        stdout=subprocess.PIPE,
                        stderr=subprocess.PIPE)

nodeCmd = result.stdout.decode("utf-8").replace('\n', '')

print(nodeCmd)

result = subprocess.run([nodeCmd, './script.js'],
                        stdout=subprocess.PIPE,
                        stderr=subprocess.PIPE)

该脚本尝试查找节点二进制文件并调用js脚本。手动运行时,程序运行正常,但是当我通过crontab安排调用时, nodeCmd 变量显示为空白(而不是 / usr / local / bin / node ),并且我收到以下错误:

[Errno 13] Permission denied: ''

这是怎么回事?这是权限问题吗?

1 个答案:

答案 0 :(得分:1)

因此原因似乎是crontab将$ PATH变量设置为与用户$ PATH不同的值。为了解决这个问题,我只需要在cron文件中的计划行上方设置所需的值即可:

create or replace PROCEDURE  "MONITORING_ACTIVITY_LOG" 
   (IN_KPI_DEF_ID_VAL IN VARCHAR DEFAULT 0,IN_OBJECT IN VARCHAR) 
AS
  PRAGMA AUTONOMOUS_TRANSACTION;
  err_code VARCHAR(100);
  err_msg VARCHAR(200);    
BEGIN

    err_code :=SUBSTR(SQLCODE, 1, 100);
    err_msg := SUBSTR(SQLERRM, 1, 200);
    Insert into ACTIVITY_LOG(KPI_DEF_ID,EXCEPTION_IN,OBJECT,SQL_ERROR_CODE,SQL_ERROR_MESSAGE,TIMESTAMP) 
    VALUES (IN_KPI_DEF_ID_VAL,'MONITORING',IN_OBJECT,err_code,err_msg,SYSDATE);
    commit;
END;