ไม่พบคำสั่ง Synology Scheduler .sh java


9

ฉันมีสคริปต์ทุบตีที่ทำงานเฉพาะคือการดำเนินการไฟล์ jar

sms.sh

java -jar /volume1/homes/jar/smssender.jar

การใช้ Synology NAS ของฉันฉันตั้งค่างาน

การตั้งค่างานดำเนินการโดยรูท

การเพิ่มคำสั่งเพื่อเรียกใช้งานสคริปต์ทุบตี การเพิ่มเอาต์พุตบันทึก

ป้อนคำอธิบายรูปภาพที่นี่

ดำเนินงานใหม่ของฉัน

ป้อนคำอธิบายรูปภาพที่นี่

การตรวจสอบบันทึกเพื่อดูข้อผิดพลาดต่อไปนี้:

/volume1/homes/jar/sms.sh: บรรทัด 1: ไม่พบคำสั่ง java:

กำลังตรวจสอบเวอร์ชั่น / การติดตั้ง Java:

ป้อนคำอธิบายรูปภาพที่นี่

การตรวจสอบการดำเนินการของสคริปต์ sh ด้วยตนเอง (ทำงาน):

ป้อนคำอธิบายรูปภาพที่นี่

ใครที่มีกรณีแปลก ๆ นี้ การแก้ไขปัญหาใด ๆ / ความคิด?

ฉันเหนื่อย

  • กำลังรีสตาร์ท NAS ของฉัน
  • ถอนการติดตั้ง / ติดตั้งแพ็คเกจ Java8

แต่ไม่มีใครทำงาน


4
เมื่อระบุปัญหาของคุณอาจเป็นปัญหากับ env (JAVA_HOME, PATH) ไม่ถูกต้องเมื่อทำการประมวลผลงาน คุณควรใช้พา ธ สัมบูรณ์เพื่อเรียกใช้งานจาวาได้ไม่ว่าจะเป็นซอร์สไฟล์สำหรับคุณ
NoDataFound

@NoDataFound คุณหมายถึงอะไรกับเส้นทางที่แน่นอน? ไม่ใช่ /volume1/(...)/file.jar พา ธ หรือไม่ ขอบคุณสำหรับความช่วยเหลือและเวลา
piguy

3
ก่อนอื่นให้ค้นหาจาวาที่ปฏิบัติการได้ จากนั้นเรียกใช้โดยใช้/whatever/path/to/java/is/java /volume1/homes/jar(ไม่เฉพาะเจาะจงกับ synology)
NoDataFound

1
เราควรเพิ่มที่นี่ว่าสิ่งใดก็ตามที่ผู้ใช้กำลังรันคำสั่งในที่สุดอาจไม่ใช่ผู้ใช้ที่ OP กำลังลงชื่อเข้าใช้ด้วย (เว้นแต่เขาจะแน่ใจ) และดังนั้นจึงมีเส้นทางที่แตกต่างกัน
BadZen

(เช่น: นี่เป็นหัวข้อจริงๆหรือไม่)
BadZen

คำตอบ:


5

เมื่อกำหนดการงาน Synology รันสคริปต์การตั้งค่าเส้นทางจะนำมาจากสคริปต์sms.sh /etc/crontabซึ่งไม่มีเส้นทาง Java

สภาพแวดล้อมเปลือกเข้าสู่ระบบเริ่มต้นถูกกำหนด /etc/profileint ในตอนท้ายจะมีส่วนเพื่อเพิ่มเส้นทาง Java

PATH=$PATH:/var/packages/Java8/target/j2sdk-image/bin # Synology Java runtime enviroment
PATH=$PATH:/var/packages/Java8/target/j2sdk-image/jre/bin # Synology Java runtime enviroment
JAVA_HOME=/var/packages/Java8/target/j2sdk-image/jre # Synology Java runtime enviroment
CLASSPATH=.:/var/packages/Java8/target/j2sdk-image/jre/lib # Synology Java runtime enviroment
LANG=en_US.utf8 # Synology Java runtime enviroment
export CLASSPATH PATH JAVA_HOME LANG # Synology Java runtime enviroment

ตามที่ระบุไว้แล้วในความคิดเห็นที่ได้รับแล้วการจัดหาสคริปต์โปรไฟล์ซึ่งมีความหมายสำหรับเปลือกโต้ตอบไม่แนะนำ คุณอาจเลียนแบบพฤติกรรมของ/etc/profileสคริปต์ในsms.shสคริปต์ของคุณเพื่อตั้งค่า CLASSPATH PATH JAVA_HOME LANG

จุดที่เพิ่มขึ้นเกี่ยวกับการเข้ารหัสฮาร์ดไดรฟ์ในสคริปต์ของคุณและความเบาในการพกพาที่ลดลงอาจมีความสำคัญมากกว่าในกรณีนี้


คำตอบของคุณช่วยฉันได้มากและถูกต้อง แต่ฉันพลาดการโทรศัพท์ของฉันและให้คะแนน 100 คะแนนแก่ผู้ใช้ ฉันเสียใจจริงๆ
piguy

@piguy นั่นคือชีวิต ;-)
ต่ำสุด

-1

ฉันไม่คุ้นเคยกับSynologyfwiw ดังนั้น ...

เชลล์สคริปต์ทำงานเมื่อเรียกใช้งานที่บรรทัดคำสั่งเนื่องจากเซสชั่นการเข้าสู่ระบบเฉพาะได้โหลดชุดของตัวแปรสภาพแวดล้อม (เช่นเมื่อเข้าสู่ระบบ.profile/.bashrcสคริปต์ในไดเรกทอรีบ้านเป็นแหล่งที่มาและตัวแปรสภาพแวดล้อมจาวาเฉพาะโหลดต่างๆ - PATH, JAVA_HOME, CLASSPATH, ฯลฯ ) ที่อนุญาตjavaและสคริปต์ให้ทำงานโดยไม่มีปัญหา

ล้มเหลวSynologyผิดพลาดงานแสดงให้เห็นว่าจาวาเฉพาะตัวแปรสภาพแวดล้อมที่ยังไม่ได้รับการโหลดและดังนั้นงาน / script javaไม่สามารถค้นหา

สมมติว่าSynologyไม่มีการตั้งค่าการกำหนดค่า / การตั้งค่าสถานะที่กำหนดให้โหลดโปรไฟล์ของการลงชื่อเข้าใช้ล่วงหน้าโซลูชัน 'ง่าย' จะแก้ไขสคริปต์ ( sms.sh) และให้แหล่งนั้นเป็นแหล่งไฟล์ทรัพยากรที่เหมาะสมก่อนดำเนินการใด ๆ (เช่นการโทรjava) ตัวอย่างง่ายๆ:

$cat sms.sh
#!/usr/bin/bash

. ~root/.bashrc      # load the root account profile before continuing ...

java ...

หมายเหตุ :

  • แทนที่rootด้วยชื่อของการเข้าสู่ระบบภายใต้สคริปต์ที่จะทำงาน (ในSynologyภาพตัวอย่างมันปรากฏว่าคุณได้เลือกrootผู้ใช้จึงอ้างอิงตัวอย่างของฉัน~root)
  • แทนที่~root/.bashrcด้วยพา ธ ไปยังโปรไฟล์ของผู้ใช้เพื่อโหลดตัวแปรสภาพแวดล้อมที่จำเป็นล่วงหน้าเพื่อให้สคริปต์สามารถค้นหาได้java

กรุณาอย่าขอแนะนำให้ config ไฟล์ที่เขียนขึ้นสำหรับการใช้งานแบบโต้ตอบเพื่อนำมาใช้ในบริบทที่ไม่โต้ตอบ - มันจะนำไปสู่สถานการณ์ที่เพื่อให้คนคิดว่าการเปลี่ยนแปลงที่พวกเขาทำกำลังจะไม่เป็นอันตราย (เพราะ.bashrcแต่สามารถทำให้เกิดการไม่เปลี่ยนวิธีการภูตทำงานใช่ไหม?) การผลิตแตก
ชาร์ลส์ดัฟฟี่

1
ดีกว่ามากในการค้นหาตำแหน่งจริงและเพียงแค่ทำการปรับปรุง PATH ที่เหมาะสมในสคริปต์ของตัวเองหรือในไฟล์การกำหนดค่าวัตถุประสงค์เฉพาะซึ่งเป็นที่มาของสคริปต์ ที่ยังทำงานอยู่ในสถานการณ์ที่นี้จะไม่ - f / E เมื่อ/etc/profile.dมากกว่า~/.bashrcมีความเกี่ยวข้อง
ชาร์ลส์ดัฟฟี่

ฮาร์ดโค้ดเป็นอุปกรณ์พกพาแทบจะไม่โดยเฉพาะในสภาพแวดล้อม OS / เวอร์ชั่นผสม สำหรับการใช้ไฟล์ config / resource แบบโต้ตอบกับไฟล์ทรัพยากร / config ที่สร้างขึ้นมาเป็นพิเศษ ... นั่นเป็นปัญหาที่เกิดขึ้นกับตัวเลือกส่วนบุคคลตามการเขียน / การบำรุงรักษาของนักพัฒนา ฉันไม่มีปัญหา / เป็นศูนย์ในช่วง 20 ปีที่ผ่านมา ... ในสภาพแวดล้อมการผลิต ... โดยใช้ไฟล์ทรัพยากร / config ทั่วทั้ง env สคริปต์ทั้งหมด ymmv
markp-fuso

1
การกระจายจุดในไฟล์โต้ตอบของผู้ใช้ไม่ได้พกพาด้วยเช่นกัน (โดยเฉพาะอย่างยิ่งเมื่อพิจารณาว่า distros rebalance เนื้อหาใดที่ทำโดยไฟล์ - บางอย่างทำแบบดั้งเดิมและใช้.profileบางคนใช้.bash_profileบางคนใช้/etc/profile.dบางคนตั้งตัวแปรสภาพแวดล้อมจาก PAM ฯลฯ ) . ไม่ทางใดก็ทางหนึ่งคุณกำลังทำสิ่งที่ไม่สามารถพกพาได้ อย่างน้อยฮาร์ดโค้ดPATH=$PATH:/whatever/specific/locationกำลังแก้ไขการตั้งค่าและพฤติกรรมของมันนั้นชัดเจนสำหรับผู้อ่าน (ผู้ที่ไม่ต้องกังวลว่าจะเปลี่ยนแปลงในภายหลัง)
ชาร์ลส์ดัฟฟี่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.