linux: วิธีเรียกใช้คำสั่งในไดเรกทอรีที่กำหนด


16

ฉันแค่ต้องการเรียกใช้คำสั่ง (จริง ๆ แล้วมันเป็นเชลล์สคริปต์) จากไดเรกทอรีที่กำหนดเป็นงาน cron cdฉันสามารถเรียกใช้มันเพื่อให้มันถูกกำหนดเป็นไดเรกทอรีที่กำหนดโดยไม่ต้องใช้

คำตอบ:


16

คำถามของคุณมีเหตุผลเล็กน้อย cdใช้ หากคุณขอคำตอบที่จะไม่ใช้cdเพราะคุณได้ลองแล้วมันใช้งานไม่ได้อาจเป็นไปได้ว่าคุณไม่ได้ป้อนอย่างถูกต้องใน crontab

วิธีที่ง่ายที่สุดคือการเขียนเชลล์สคริปต์ขนาดเล็กที่จะ cd และรันภารกิจหลักของคุณจากนั้นให้สคริปต์กับ cron


1
crontab ให้ฉันใส่คำสั่งหลายคำสั่งในงานเดียวได้ไหม? ถ้าไม่ใช่ฉันจะต้องใส่รหัสซีดี [path] และเส้นทางอาจมีการเปลี่ยนแปลงซึ่งก่อให้เกิดปัญหาในการติดตั้งที่น่ารำคาญและการกระจายการกำหนดค่าซึ่งเป็นสิ่งที่ฉันหลีกเลี่ยงค่าใช้จ่ายทั้งหมด
Zombies

1
@ Zombies: ใช่คุณสามารถใส่คำสั่งหลายคำสั่งในงานเดียว (เช่นการแยกพวกเขาด้วยเครื่องหมายอัฒภาคหรือ&&) แต่คุณยังสามารถเขียนสคริปต์แยกต่างหากที่มีคำสั่งทั้งหมดและเพียงใส่เส้นทางไปยังสคริปต์ใน cron เช่น Daenyth แนะนำ สคริปต์ของคุณสามารถทำสิ่งที่ชอบอ่านไดเรกทอรีจากแฟ้มการกำหนดค่าที่คุณชอบ - จุดที่เป็น cdแต่คุณต้องการที่จะได้รับชื่อไดเรกทอรีในสคริปต์ของคุณมันเป็นข้ออ้างที่จะไม่ใช้ไม่มี
David Z

ฉันเห็น. ฉันจะต้องการใช้ cd บน crontab โดยตรงเพราะถ้าฉันเขียนมันลงในไฟล์ฉันจะต้องแก้ไขมันในแต่ละไฟล์ซึ่งทำให้การกำหนดค่าที่ละเอียดอ่อน / ง่ายต่อการทำลาย
Zombies

3
และถ้าคุณใส่ cd ลงในไฟล์ crontab คุณจะต้องแก้ไขมันในแต่ละไฟล์ crontab ฉันไม่เข้าใจปัญหา บางทีคุณอาจอธิบายได้ว่าคุณพยายามทำอะไรให้เต็มที่
garyjohn

และอีกเหตุผลสำหรับการเรียกใช้เชลล์สคริปต์จากไฟล์ crontab คือการตรวจสอบให้แน่ใจว่าตั้งค่าสภาพแวดล้อมได้อย่างถูกต้อง สภาพแวดล้อมที่มอบให้กับงาน cron นั้นแทบจะไม่เกิดขึ้นแม้แต่น้อยดังนั้นคุณจึงจำเป็นต้องรีเซ็ตมันเป็นสิ่งที่ใช้ได้มากกว่า
Jonathan Leffler

57

เพียงระบุเส้นทางไปยังสคริปต์ ไม่จำเป็นต้องcd:

0 12 * * * /path/to/script args

หากสคริปต์ของคุณค้นหาไฟล์.คุณจะต้องใช้cd:

0 12 * * * cd /some/dir && /path/to/script args


4
&&เช่นเดียวกับในคำตอบ @WillSheppard ลิงก์ไปยังจะดีกว่า;เพราะ&&เพียงเรียกใช้คำสั่งถัดไปหากคำสั่งก่อนหน้านี้ประสบความสำเร็จ
Max Heiber

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