ฉันมีสถานการณ์ที่แปลกมาก
ฉันมีหน่วย systemd
[หน่วย]
Description=งานสำรองสแน็ปช็อตทุกคืนสำหรับโวลุ่ม [%i]
[บริการ]
ประเภท = ง่าย
KillMode=กระบวนการ
EnvironmentFile=/etc/systemd/schedule-backup_%i.conf
ExecStart=/usr/local/bin/backup.sh -s '$SOURCE' -b '$BACKUP' -t '$TITLE' -l 'backup_%i.log'
เมื่อฉันดำเนินการด้วยอินสแตนซ์บริการ:
sudo systemctl เริ่ม [email protected]
สคริปต์ backup.sh ไม่ได้รับพารามิเตอร์สุดท้ายเลย ควรได้รับ "backup_projects.log"
ฉันกำลังอ่านพารามิเตอร์ด้วย
ในขณะที่รับค่าสถานะ s:b:t:l:
ทำ
กรณี "${flag}" ใน
s) source_path_root="${OPTARG}";;
b) backup_path_root="${OPTARG}";;
t) email_title="${OPTARG}";;
ล) log_name="${OPTARG}";;
เอสแซค
เสร็จแล้ว
เมื่อฉันตรวจสอบบันทึกการบริการ ดูเหมือนว่ามีการเรียกสคริปต์ด้วยพารามิเตอร์ที่เหมาะสม:
systemctl -l สถานะ [email protected] -n50
â [email protected] - งานสำรองสแนปชอตทุกคืนสำหรับปริมาณ [โครงการ]
โหลดแล้ว: โหลดแล้ว (/etc/systemd/system/[email protected]; คงที่)
ใช้งานอยู่: ไม่ได้ใช้งาน (ตายแล้ว) ตั้งแต่วันอังคารที่ 2021-12-14 12:47:01 EET; 16 นาทีที่แล้ว
TriggeredBy: âกำหนดการสำรองข้อมูล_projects.timer
กระบวนการ: 8161 ExecStart=/usr/local/bin/backup.sh -s $SOURCE -b $BACKUP -t $TITLE -l backup_projects.log (code=exited, status=0/SUCCESS)
PID หลัก: 8161 (รหัส=ออก สถานะ=0/สำเร็จ)
ซีพียู: 3.122 วินาที
14 ธันวาคม 12:46:56 หุ่นยนต์ที่ล้ม systemd[1]: เริ่มงานสำรองสแน็ปช็อตตอนกลางคืนสำหรับวอลุ่ม [โปรเจ็กต์]
14 ธันวาคม 12:46:56 backup.sh หุ่นยนต์ตก [8161]: /usr/local/bin/backup.sh: บรรทัด 37: /var/log/: เป็นไดเร็กทอรี
14 ธันวาคม 12:46:56 backup.sh หุ่นยนต์ตก [8161]: ไฟล์บันทึกตั้งค่าเป็น /var/log/
เมื่อฉันเรียกใช้งานสคริปต์เดียวกันจากคอนโซล พารามิเตอร์ก็เป็นที่ยอมรับ ผมทำอะไรผิดหรือเปล่า?
แก้ไข: ดูเหมือนว่าจะทำงานเมื่อฉันใส่พารามิเตอร์ -l ในจุดเริ่มต้นแทนที่จะเป็นตอนท้าย อาจเป็นปัญหากับ getopts ฉันจะยอมรับคำตอบจากใครก็ตามที่สามารถอธิบายเรื่องนี้ได้