“ ไม่พบคำสั่ง” เมื่อเรียกใช้สคริปต์ผ่าน cron


29

ฉันต้องการเรียกใช้สคริปต์ใน crontab แต่ฉันมีปัญหา ...

ในสคริปต์ของฉันฉันเรียกใช้คำสั่งนี้:

db2 connect to myDB2

สิ่งนี้ทำงานได้ดีเมื่อฉันเรียกใช้ในฐานะผู้ใช้db2inst1แต่เมื่อฉันรันสคริปต์นี้ในdb2inst1 crontabฉันจะได้รับสิ่งนี้:

ไม่พบคำสั่ง db2:

ฉันจะแก้ปัญหานี้ได้อย่างไร

คำตอบ:


43

เพื่อหลีกเลี่ยงการพิมพ์พา ธ สัมบูรณ์ไปยังคำสั่งเชลล์แนะนำ$PATHตัวแปรสภาพแวดล้อมแต่ละไดเรกทอรีจะถูกคั่นด้วย:และการค้นหาจะทำจากซ้ายไปขวา cronมักจะล้างสภาพแวดล้อมทั้งหมดรวมถึง$PATHตัวแปรนี้ ดังนั้นสคริปต์อาจทำงานแตกต่างกันใน cron ของคุณเปรียบเทียบกับพฤติกรรมในเชลล์

ใช้เส้นทางที่แน่นอน

เรียกใช้which db2ในฐานะdb2inst1ผู้ใช้เพื่อรับเส้นทางแบบเต็มสำหรับdb2โปรแกรม หากเอาต์พุตคือ/usr/bin/db2คำสั่ง cron ของคุณจะมีลักษณะดังนี้:

/usr/bin/db2 connect to myDB2

ตั้งค่าตัวแปร PATH

เรียกใช้echo "$PATH"ในฐานะdb2inst1ผู้ใช้เพื่อรับ$PATHตัวแปรและตรวจสอบว่าตัวแปรนี้มีอยู่ในสคริปต์ cron ของคุณด้วย ตัวอย่างเช่นถ้าผลลัพธ์เป็น/usr/local/bin:/usr/bin:/binคุณจะใส่บรรทัดถัดไปในด้านบนของเชลล์สคริปต์ของคุณ:

export PATH="/usr/local/bin:/usr/bin:/bin"

8

ตามที่ได้รับคำตอบในhttps://askubuntu.com/a/23438/227839คุณควรตั้งค่าPATHในเชลล์สคริปต์ของคุณ:

#!/bin/bash
PATH="/usr/local/bin:/usr/bin:/bin"

# rest of script follows

หรือในไฟล์ crontab ซึ่งจะใช้กับงาน cron ทั้งหมด:

PATH="/usr/local/bin:/usr/bin:/bin"
0 1 * * * db2 connect to myDB2

ขอบคุณมันมีประโยชน์!
Yamashiro Rion

3

คุณต้องกำหนดว่าdb2 และmyDB2คืออะไรมิฉะนั้นให้ใช้ตำแหน่งที่แน่นอนของ ' file ' หรือ ' application ' ที่ต้องการเรียกใช้

ตัวอย่าง:

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