Saya percaya ini harus sederhana tetapi saya tidak bisa membuatnya bekerja dengan baik.
Ini adalah perintah yang bisa saya jalankan di baris perintah:
cd /home/debian/ap
# Start a virtualenv
source venv-ap/bin/activate
# This needs to happen inside the virtualenv and takes ~20 seconds
crossbar start
# Outside the virtualenv, perhaps in a different command line window
python3 /home/debian/myscript.py
Perintah-perintah ini harus dilakukan dalam urutan ini. Karena virtualenv, non-executable untuk crossbar, dan skrip python yang terpisah setelah itu, saya belum bisa menemukan cara terbaik untuk mendapatkan ini berfungsi. Pekerjaan saya saat ini dalam proses:
[Unit]
Description=Start CB
After=network.target
[Service]
Type=simple
User=debian
ExecStartPre=source /home/debian/ap/venv-ap/bin/activate
ExecStart=cd /home/debian/ap/ && crossbar start
Restart=always
[Install]
WantedBy=multi-user.target
systemd
python
python3
virtualenv
sscirrus
sumber
sumber
Jawaban:
Ini tidak berfungsi karena
source
merupakan perintah shell, jadi systemdExecStart=
atauExecStartPre=
tidak akan memahaminya secara langsung ... (BTW, hal yang sama berlaku untukcd
dan&&
.)Anda bisa mencapainya dengan menjalankan shell secara eksplisit dan menjalankan semua perintah Anda di sana:
Tetapi pendekatan yang lebih baik adalah, alih-alih mencari skrip "aktifkan", untuk menggunakan
python
executable dibin/
virtualenv Anda secara langsung.Jika Anda melihat dokumen penggunaan virtualenv , Anda akan melihat tertulis:
Dengan kata lain, dengan asumsi
crossbar
adalah skrip Python yang ingin Anda jalankan yang memerlukanvenv-ap
virtualenv, cukup mulaicrossbar
dengan:Dan itu akan secara otomatis menggunakan virtualenv setiap kali dipanggil.
Juga memungkinkan, memanggil juru bahasa Python dari virtualenv secara langsung, dengan:
(Juga, mengenai menjalankan di direktori tertentu, pengaturan
WorkingDirectory=/home/debian/ap
lebih baik daripada menggunakancd
perintah. Anda tidak perlu shell seperti itu, dan systemd dapat melakukan penanganan kesalahan yang lebih baik untuk Anda.)sumber