การดำเนินการ chdir ก่อนที่จะเริ่มบริการ systemd


148

คำถาม: ฉันสามารถเริ่มกระบวนการด้วย systemd และกำหนดไดเรกทอรีการทำงานที่ฉันเลือกได้หรือไม่?

systemdฉันมีบริการที่ฉันต้องการที่จะเริ่มต้นด้วย เมื่อเริ่มบริการนั้นฉันต้องการให้สามารถกำหนดไดเรกทอรีการทำงานปัจจุบันได้ ฉันรู้วิธีการทำเช่นนี้หากผมใช้แต่ฉันมีปัญหากับinitsystemd

นี่คือสิ่งที่ฉันพยายามจะทำงาน

บริการของฉัน

ฉันสร้างยูทิลิตี้ง่าย ๆ ("listdir") เขียนเป็น Python และวางใน/opt/bin/listdir:

#! /usr/bin/python

import os

print 'Current working directory: %s' % (os.getcwd())

ไฟล์กำหนดค่าของฉัน

จากนั้นฉันสร้างlistdir.serviceไฟล์systemdและวางไว้ที่นี่/lib/systemd/system/listdir.service::

[Unit]
Description=Test of listing CWD.

[Service]
ExecStartPre=chdir /usr/local
ExecStart=/opt/bin/listdir
StandardOutput=syslog
StandardError=syslog

[Install]
WantedBy=multi-user.target

ปัญหา

เมื่อฉันเรียกใช้systemctl start listdirบันทึกระบบของฉันจะบันทึกไดเรกทอรีราก ("/") เป็นไดเรกทอรีการทำงานปัจจุบัน แน่นอนฉันคาดว่าจะ/usr/localเป็นไดเรกทอรีปัจจุบันเนื่องจากฉันคิดว่าExecStartPreจะเปลี่ยนไดเรกทอรีก่อนเริ่มกระบวนการ

เห็นได้ชัดว่าฉันจินตนาการว่าsystemdมันจะทำงานคล้ายกับเชลล์สคริปต์ (แม้ว่าฉันรู้ว่ามันไม่ใช่สคริปต์เชลล์) มีคนให้ความคิดแก่ฉันในสิ่งที่ฉันควรทำอย่างไร มันเป็นไปได้ที่จะตั้งค่าไดเรกทอรีการทำงานโดยใช้systemd? ขอบคุณ!


แก้ไข:บันทึกระบบของฉันรายงานข้อผิดพลาด (ฉันเพิ่งสังเกตเห็น)

Executable path is not absolute, ignoring: chdir /usr/local 

ดังนั้นchdirเป็นคำสั่งเชลล์และไม่สามารถเรียกใช้งานได้ ถูก แต่ยังมีวิธีที่ฉันจะเปลี่ยนไดเรกทอรีใช้systemdหรือไม่?

คำตอบ:


270

ใน systemd> = 227 คุณควรจะสามารถใช้:

[Service]
WorkingDirectory=/usr/local

เพื่อให้สคริปต์ของคุณทำงานที่นั่น

( DOCS )


4
คุณพบสิ่งนี้ได้อย่างไร ไม่ได้กล่าวถึงในเอกสาร !
jameshfisher


3
@EricRenouf aha พวกเขาควรทำซ้ำตัวเลือกที่ใช้ร่วมกันเหล่านั้นในเอกสารบริการ
jameshfisher

3
ดังนั้นเพื่อความชัดเจนนี่จะไปใน[Service]หัวข้อหรือไม่?
dthor

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