นำเข้าตัวแปร PATH ในหน่วย systemd


1

ฉันมีบริการ systemd ที่มีลักษณะเช่นนี้:

[Unit]
Description=Kcrypt Backend Webpack Bundler
After=network.target

[Service]
User=kenny
Environment=NODE_ENV=PROD
WorkingDirectory=/var/www/kcrypt-api/
ExecStart=/var/www/kcrypt-api/scripts/webpack.sh

[Install]
WantedBy=multi-user.target

ไฟล์. sh มีลักษณะดังนี้:

#!/usr/bin/env bash

export NODE_ENV=DEV

rm ./dist/* -rf

yarn start webpack --watch 

yarnปัญหาคือว่ามันไม่สามารถหา

kennyผู้ใช้ของฉันถูกเรียกว่า kennyมีเครื่องมือที่เรียกว่าnvmติดตั้งที่จัดการnodejsเวอร์ชัน เครื่องมือนั้นเพิ่มไดเรกทอรีไปยังPATHตัวแปร env โดยการแก้ไข '~ / .bashrc'

นั่นหมายถึงว่าคำสั่งจะใช้ได้เฉพาะเมื่อผู้ใช้เข้าสู่ระบบในฐานะyarnkenny

ฉันถูกทิ้งให้อยู่กับความรู้สึกว่าถ้าผมตั้งค่าsystemdของunitผู้ใช้ที่ 'เคนนี' systemdจะดูแลส่วนที่เหลือหรือผมไม่ทราบว่าสิ่งที่ผมคิด

มีวิธีใดบ้างที่ฉันสามารถนำเข้าkennyตัวแปร PATH ในsystemd unit?


คุณไม่ควรเรียกสคริปต์นั้นเลย คุณควรเรียกเส้นด้ายโดยตรงจากหน่วย systemd
Michael Hampton

คำตอบ:


1

แทนที่จะพยายาม 'อ้างอิงPATHตัวแปรของผู้ใช้' คุณควรกำหนดPATHด้วยตนเองหรือเหมาะสมกว่าให้ใช้พา ธ แบบเต็มไปยังไบนารี

นั่นหมายความว่าคำสั่ง yarn ใช้ได้เฉพาะเมื่อผู้ใช้ล็อกอินเป็น kenny

มันไม่ถูกต้อง หมายความyarnว่าไม่ได้ติดตั้งในตำแหน่งที่อ้างอิงโดยPATHตัวแปรที่ใช้โดย systemd และมีแนวโน้มว่าจะอยู่ในตำแหน่งที่กำหนดเองหรือตำแหน่งภายนอกตัวแปร PATH เริ่มต้น

เมื่อคุณเข้าสู่ระบบในฐานะkennyใช้which yarnเพื่อพิมพ์เส้นทางไปyarnจากนั้นตรวจสอบให้แน่ใจว่าได้ใช้เมื่ออ้างอิงถึงในสคริปต์


0

bash จะมาก็ต่อ~/.bashrcเมื่อคุณใช้มันเป็นเชลล์แบบโต้ตอบมันจะไม่ทำอย่างนั้นถ้าคุณแค่ใช้ bash สำหรับสคริปต์

เมื่อพิจารณาถึง systemd จะรัน bash ในฐานะล่ามของwebpack.shสคริปต์เท่านั้น (อันที่จริงแล้วมันไม่รู้ด้วยซ้ำว่า bash มีส่วนเกี่ยวข้องเคอร์เนลจะเรียกใช้งานเป็นล่ามจาก #! line) ดังนั้นจึงไม่ใช่เชลล์แบบโต้ตอบและไม่มี อ่านไฟล์เริ่มต้น

คุณสามารถแก้ไขได้โดยการหาแหล่ง~/.bashrcที่มาของwebpack.shสคริปต์ของคุณอย่างชัดเจนโดยสมมติว่าทุกอย่างในนั้นปลอดภัยที่จะทำงานในเชลล์ที่ไม่มีการโต้ตอบ (ควรจะดี)

ดังนั้นให้พิจารณาเพิ่มบรรทัดนี้ในตอนต้นของสคริปต์ของคุณ:

. ~/.bashrc
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.