ปัญหาในการสร้างไดเรกทอรีจากการรันสคริปต์โดย launchd


3

ฉันมีสคริปต์ง่ายๆที่สร้างไดเรกทอรีใหม่ตามวันที่แล้วคัดลอกชุดของไฟล์ไปยังไดเรกทอรีนั้น มันทำงานได้ดีจาก Terminal เมื่อฉันตั้งค่าให้ทำงานเป็น UserAgent มันจะล้มเหลว บันทึกข้อผิดพลาดแสดงว่ามีการเปลี่ยนเส้นทางจาก /Users/Study/xxx ไปยัง /var/root/xxx. ฉันพยายามเรียกใช้เป็น root จาก Terminal และยังใช้งานได้ ฉันมั่นใจ root ไม่ใช่เจ้าของไฟล์สคริปต์ ฉันเปลี่ยนเส้นทางดั้งเดิมของ ~/xxx ไปที่ /Users/Study/xxx แต่ด้วยเหตุผลบางอย่างเมื่อเรียกใช้จาก launchd มันจะเปลี่ยนเส้นทาง ความคิดใด ๆ

สคริปต์:

!/bin/bash

MO=$(date +%d%B%Y)
mkdir /Users/Study/Dropbox/SPID_backups/$MO
cp -r /Users/Study/WebDevelopment/SPID/*.* /Users/Study/Dropbox/SPID_backups/$MO

Platctl Plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.spidbackup</string>
    <key>Program</key>
    <string>/Users/Study/Library/Scripts/spidbackup.sh</string>
    <key>StandardErrorPath</key>
    <string>/tmp/com.spidbackup.err</string>
    <key>StandardOutPath</key>
    <string>/tmp/com.spidbackup.out</string>
    <key>StartCalendarInterval</key>
    <array>
        <dict>
            <key>Hour</key>
            <integer>17</integer>
            <key>Minute</key>
            <integer>11</integer>
        </dict>
    </array>
    <key>WorkingDirectory</key>
    <string>/Users/Study</string>
</dict>
</plist>

ขั้นแรกดูเหมือนว่านี่จะเป็นการเปิดใช้งาน daemon เรียกใช้งาน (ในฐานะรูท) แทนที่จะเป็นเอเจนต์เรียกใช้งาน (ภายใต้ผู้ใช้ที่เข้าสู่ระบบ) คุณติดตั้งและเปิดใช้งานได้อย่างไร นอกจากนี้คุณแน่ใจหรือไม่ว่าคุณกำลังเรียกใช้สคริปต์ที่ถูกต้อง (เช่นเวอร์ชันที่อัปเดตด้วย / Users / Study / xxx แทน ~ / xxx)
Gordon Davisson

กอร์ดอนใช่ฉันใช้ cat บนไฟล์ที่อยู่ในรายการ มันเป็นรุ่นที่ถูกต้อง มันทำงานได้ดีจากบรรทัดคำสั่ง ฉันเพิ่มมันเป็นรูทใน / Library / LaunchAgents / ฉันได้ลองย้ายไปที่ ~ / Library / LaunchAgents แล้วและตรวจสอบว่ารูทนั้นไม่ใช่เจ้าของ
Mike

คำถามด่วน ... คุณต้องการให้ไฟล์นี้ทำงานอย่างไรเมื่อผู้ใช้เข้าสู่ระบบหรือเมื่อคอมพิวเตอร์เปิดอยู่ คุณต้องการมันเพียงหนึ่งผู้ใช้หรือสำหรับผู้ใช้ทั้งหมด
Allan

@ อัลลันฉันต้องการให้มันทำงานเดือนละครั้งหากคอมพิวเตอร์เปิดอยู่ แต่ฉันเป็นผู้ใช้คนเดียวและคอมพิวเตอร์เปิดอยู่เสมอ ฉันรู้แล้วว่า LauncgAgents เป็นสถานที่ที่ดีที่สุดสำหรับมัน
Mike

คำตอบ:


1

งานสำรองของคุณนั้นมีลักษณะเฉพาะของผู้ใช้และไม่มีบริการระบบดังนั้นตำแหน่งที่เหมาะสมสำหรับตัวแทนการเปิดตัวคือ ~ / Library / LaunchAgents / หากคุณใส่คำว่า plist ไว้ใน / Library / LaunchAgents มันจะทำงานในนามของผู้ใช้ทุกคนที่ล็อกอินในเวลา 5.11pm ซึ่งจะล้มเหลวสำหรับผู้ใช้ส่วนใหญ่เนื่องจากพวกเขาอาจไม่สามารถเข้าถึงโฟลเดอร์ / ไฟล์ผู้ใช้บางส่วนหรือเกือบทั้งหมด


ใช้ Shebang ที่เหมาะสมในสคริปต์ #!/bin/bash.. และทำให้สคริปต์เรียกใช้งานได้: chmod +x /Users/Study/Library/Scripts/spidbackup.sh.

ลบ plist ออกจาก launchctl db อย่างสมบูรณ์ด้วย sudo launchctl remove com.spidbackup และ launchctl remove com.spidbackup. ย้ายโปรแกรมไปยัง / Users / Study / Library / LaunchAgents /, chown / chmod ให้กับผู้ใช้ของคุณและลบคีย์ WorkingDirectory และสตริงที่เกี่ยวข้อง

ในที่สุดรีโหลดเอเจนต์ด้วย:

launchctl load /Users/Study/Library/LaunchAgents/com.spidbackup.plist 

ในที่สุดการอนุญาต / การเป็นเจ้าของที่เหมาะสมสำหรับไฟล์คือ:

ls -l /Users/Study/Library/Scripts/spidbackup.sh
-rwxr-xr-x  1 study  staff  ... spidbackup.sh

หรือ

-rwx------  1 study  staff  ... spidbackup.sh

และ

ls -l /Users/Study/Library/LaunchAgents/com.spidbackup.plist 
-rw-r--r--  1 study  staff  ... com.spidbackup.plist

ทะลึ่ง ศึกษา เป็นชื่อผู้ใช้ของคุณ

โปรดตรวจสอบการใช้อักษรตัวพิมพ์ใหญ่ (เช่นการศึกษากับการศึกษา)


klanomoath นั่นเป็นข้อผิดพลาดในการคัดลอก / วางบน shebang # มีอยู่จริง ฉันพยายามคัดลอกข้อความจากแต่ละไฟล์และวางเป็นไฟล์ใหม่เปลี่ยนชื่อแต่ละไฟล์และวางลงในไดเรกทอรีของพวกเขา: ~ / Library / LaunchAgents / spidbak.sh, ~ / Library / Scripts / spidbak.sh ฉันคัดลอก / วางใน TextWrangler, บันทึกไว้ในโฟลเดอร์เอกสารของฉันและใช้ cp ใน Terminal เพื่อย้ายมัน ฉันทำ spidbak.sh ปฏิบัติการได้ ยังคงเป็นปัญหาเดียวกัน ฉันค่อนข้างสับสน
Mike

ฉันเพิ่งลองย้ายสคริปต์ไปยังไดเรกทอรีใหม่ที่ไม่ได้เป็นเจ้าของโดยรูท ไม่มีการเปลี่ยนแปลง.
Mike

@Mike ชื่อที่ถูกต้องคือ /Users/Study/Library/LaunchAgents/com.spidbackup.plist "
klanomath

0

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

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