crontab开机创建screen会话+启动pyenv+激活虚拟环境+自动运行python脚本

这是我尝试了很多次以后得出来的结果,大致先说明一下:

  1. screen使用-dmS参数以detached模式启动screen
  2. screen名称和执行的命令使用变量传送,而不能直接在命令行指定。
  3. 虚拟环境需要从绝对路径激活。

上代码。创建/root/startup.sh,赋予执行权限,内容如下:

#!/bin/bash
screen_name="updatepic"  
screen -dmS $screen_name 
cmd1="source ~/.bashrc"
cmd2="source ~/.pyenv/versions/py366/bin/activate"
cmd3="python apscheduler_update_pic.py";  
screen -x -S $screen_name -p 0 -X stuff "$cmd1"
screen -x -S $screen_name -p 0 -X stuff '\n'
screen -x -S $screen_name -p 0 -X stuff "$cmd2"
screen -x -S $screen_name -p 0 -X stuff '\n'
screen -x -S $screen_name -p 0 -X stuff "$cmd3"  
screen -x -S $screen_name -p 0 -X stuff '\n' 

其中虚拟环境路径和执行的python脚本自行替换。
然后crontab添加一行:

@reboot (sleep 60 && /root/start_apscheduler.sh )

启动后screen -ls可以看到我们启动的名为updatepic的screen会话。screen -r恢复会话,然后按^C中断正在执行的脚本,可以看到类似如下内容,表示成功:

^CTraceback (most recent call last):
  File "apscheduler_update_pic.py", line 130, in <module>
    time.sleep(1)
KeyboardInterrupt
(py366) [root@Aliyun1 ~]# screen -ls
There is a screen on:
        2129.updatepic  (Attached)
1 Socket in /var/run/screen/S-root.
(py366) [root@Aliyun1 ~]# which python
/root/.pyenv/versions/3.6.6/envs/py366/bin/python

你可能感兴趣的:(Linux,Python)