来自cron作业的Python subprocess.popen

时间:2019-06-29 09:07:46

标签: python shell cron subprocess qgis

我正在尝试将服务器设置为在启动时运行(Raspberry Pi)-服务器调用了一个脚本,该脚本调用了一个脚本...除非它们不触发。

  1. 使用crontab -e添加cron作业并编写@reboot python3 /path/to/my_server.py(也已在行尾使用&进行了测试)...效果很好。
  2. my_server.py使用httpd.server_forever()在几个端点上监听……效果很好。
  3. 其中一个服务器端点运行subprocess.Popen(['python3', '/path/to/my_script.py'])
  4. my_script.py然后运行subprocess.Popen(['qgis'])(也尝试过shell=True)。

但是,QGIS尚未开始。

这仅在尝试使用cron作业在启动时运行所有内容时发生。如果我手动打开终端并运行python3 /path/to/my_server.py,那么一切都会按预期进行。我认为这与...未在shell /终端中运行-可能是Popen的行为有关?

1 个答案:

答案 0 :(得分:0)

问题是 class SynchList { private int sum = 0; private final int MOD = 3; private int compare; private final int LIMIT = 1000; private ArrayList<Integer> list = new ArrayList<Integer>(); public synchronized void populate( int compare) throws InterruptedException{ for(int i=0; i<=LIMIT; i++){ if (i%this.MOD == compare){ list.add(i); } } } public synchronized void sum( int compare ) throws InterruptedException{ for (Integer ger : list){ if (ger%MOD == compare){ sum+=ger; } System.out.println( sum ); } } } class Tst extends Thread { int compare; SynchList synchList; public Tst(int compare, SynchList synchList) { this.compare= compare; this.synchList = synchList; } @Override public void run(){ try { synchList.populate( compare ); synchList.sum( compare ); } catch (InterruptedException ex) { Logger.getLogger(Tst.class.getName()).log(Level.SEVERE, null, ex); } } } public class Main { public static void main(String[] args) { SynchList synchList = new SynchList(); Tst tst1 = new Tst( 0 , synchList ); tst1.start(); Tst tst2 = new Tst( 1, synchList ); tst2.start(); Tst tst3 = new Tst( 2, synchList ); tst3.start(); } } 要求x服务器正在运行,而QGIS默认情况下将不具有该服务器。

修复:将cron项更改为cron,一切正常!