iT邦幫忙

0

linux 自動排程進入 conda虛擬環境

各位大大晚安

目前有一支python程式需要設定排程處理

但需要先進入 conda 的虛擬環境下才能執行(因為套件灌在虛擬環境下)

能不能直接使用 linux 的 at 指令完成?

麻煩各位大大解惑了,謝謝!!

froce iT邦大師 4 級 ‧ 2018-12-05 08:18:35 檢舉
https://www.jianshu.com/p/cf1dbd17ee2f

2 個回答

0
jumbokh
iT邦見習生 0 級 ‧ 2018-12-06 08:45:53

把執行環境包在容器中執行如何?

yanwu0105 iT邦新手 5 級 ‧ 2018-12-06 09:47:11 檢舉

大大您好,不太懂包在容器裡是甚麼意思
目前把指令寫成一個shell script的sh檔
但還時無法在 at指令下執行

1
cool21540125
iT邦新手 5 級 ‧ 2018-12-06 14:10:32

請問你要執行的程式是"排程定期"嗎?

若是的話要使用 crontab 而非 at

解法 1

先找出你的虛擬環境位置

$ conda env list
# conda environments:
#
venv1                      /home/user/anaconda3/envs/venv1
venv2                      /home/user/anaconda3/envs/venv2
root                    *  /home/user/anaconda3

然後輸入 crontab -e 進入排程中編輯定期排程

0 1 * * * /home/user/anaconda3/envs/venv2/bin/python3.6 /home/user/executeme.py
分 時 日 月 每週? 用什麼 執行什麼

上頭是直接指定虛擬環境的 python 直譯器位置來執行特定程式

解法2

直接在你的 python 程式的第一行(人稱它為shebang line) 輸入如下

#! /home/user/anaconda3/envs/venv2/bin/python3.6
"""
程式註解區塊
"""
############### 下面都是程式碼~~
print('OK')

然後記得把該程式改為可執行 chmod a+x /home/user/executeme.py (a+x請慎用)

最後直接使用 /home/user/executeme.py 就可直接用虛擬環境的直譯器執行該python腳本

看更多先前的回應...收起先前的回應...
yanwu0105 iT邦新手 5 級 ‧ 2018-12-06 14:13:31 檢舉

大大您好,感謝大大回覆
我是要設定一次性的自動排程
而非 定期性的
但我也試過這種方法,但還是沒辦法執行檔案
再麻煩大大解惑

我不確定你哪邊指令可能有問題...

我使用 echo '/home/user/executeme.py' | at now +1min, 然後可以看看到 job 30 at Thu Dec 6 14:45:00 2018 這樣的回應, 如果OK的話, 表示 at 排程應該是沒有設錯

另外, 上面的範例有點來亂的, python腳本裏頭, print 是不會有東西的XD

設完 at 後, 可使用 atq 來看 一次性排程柱列

如果上述OK 但依然無法執行, 可能你的虛擬環境有問題

建議先直接使用虛擬環境直譯器絕對路徑來執行看看你的程式再來做後續判斷
/home/user/anaconda3/envs/venv2/bin/python3.6 /home/user/executeme.py

yanwu0105 iT邦新手 5 級 ‧ 2018-12-06 15:24:01 檢舉

C大您好 用虛擬環境直譯器的絕對路徑 是可以執行的
另外有私訊你喔

我要發表回答

立即登入回答