Linux

Python:如何配置 crontab 以在虛擬環境中執行腳本

  • July 7, 2021

我是用 linux 製作 cronjobs 的新手。我的目標是在自己的虛擬環境中執行 python 腳本。

為此,我首先製作了一個名為twitter.sh的 shell 腳本,其內容為:

source /home/josecarlos/Workspace/python/robot2-rss/venv/bin/activate 
python /home/josecarlos/Workspace/python/robot2-rss/main.py R,1

它的路線是:

/home/josecarlos/Workspace/python/robot2-rss

我們可以訪問 source 和 python 命令,因為它們的路由*/usr/bin*包含在 PATH 變數中,如下圖所示:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin

我的 cronjob 的配置是:

# m h  dom mon dow   command
*/1 * * * * /home/josecarlos/Workspace/python/robot2-rss/twitter.sh

但是,我的 cron 作業的這種配置不起作用,我不知道我在做什麼錯:(

編輯我:

我已將 twitter.sh 腳本修改為以下新程式碼:

#!/bin/sh

/home/josecarlos/Workspace/python/robot2-rss/venv/bin/python /home/josecarlos/Workspace/python/robot2-rss/main.py R,1

如果我直接執行腳本可以正常工作,但使用 cron 作業不起作用!!!:(

編輯2:

在 twitter.sh 的最後一次修改中,我只是呼叫了我的 python 腳本,我修改了我的 cron 作業以直接呼叫 python 腳本,如下所示:

# m h  dom mon dow   command
* * * * * /home/josecarlos/Workspace/python/robot2-rss/venv/bin/python /home/josecarlos/Workspace/python/robot2-rss/main.py R,1

而且它不起作用:(我不知道會發生什麼:(

設置適當的外殼

編輯 twitter.sh

#!/bin/bash
PATH=....
source /home/josecarlos/Workspace/python/robot2-rss/venv/bin/activate 
python /home/josecarlos/Workspace/python/robot2-rss/main.py R,1

一定要設置PATH。

命令的日誌結果

在 crontab 中添加登錄部分

*/1 * * * * /home/josecarlos/Workspace/python/robot2-rss/twitter.sh >> /var/log/twitter.log 2>&1

如果出現問題,您可以查看/var/log/twitter.log

引用自:https://unix.stackexchange.com/questions/657281