คำถามติดแท็ก error-handling

ใช้แท็กนี้สำหรับคำถามเกี่ยวกับวิธีจัดการข้อผิดพลาดที่สร้างขึ้นในเชลล์สคริปต์

5
วิธีการจับข้อผิดพลาดในสคริปต์ทุบตีลินุกซ์?
ฉันทำสคริปต์ต่อไปนี้: # !/bin/bash # OUTPUT-COLORING red='\e[0;31m' green='\e[0;32m' NC='\e[0m' # No Color # FUNCTIONS # directoryExists - Does the directory exist? function directoryExists { cd $1 if [ $? = 0 ] then echo -e "${green}$1${NC}" else echo -e "${red}$1${NC}" fi } # EXE directoryExists "~/foobar" directoryExists "/www/html/drupal" สคริปต์ทำงานได้ แต่ข้างก้องของฉันก็มีเอาต์พุตเมื่อ cd …

5
ปิดใช้งานอีเมล cron เว้นแต่มีข้อผิดพลาดหรือไม่
ฉันจะรับอีเมลจาก cron ได้ก็ต่อเมื่อมีข้อผิดพลาดเท่านั้น ในกรณีส่วนใหญ่ที่โด่งดังงานจะทำงานได้ดี - และฉันไม่สนใจเกี่ยวกับผลลัพธ์ เป็นเพียงในกรณีที่หายากของความล้มเหลวที่ฉันต้องการ / จำเป็นต้องรู้ ฉันมีprocmailพร้อมใช้งาน - แต่ฉันไม่แน่ใจว่าสิ่งที่ฉันกำลังอธิบายเป็นไปได้ที่จะจัดการ cron ภายนอก "ถูกต้อง"

5
ไม่แสดงข้อความเซิร์ฟเวอร์ใน rsync
เมื่อฉันrsyncหรือscpจากเซิร์ฟเวอร์โดยเฉพาะฉันได้รับข้อความค่อนข้างยาวบอกกฎของเซิร์ฟเวอร์ อย่างไรก็ตามเมื่อฉันตั้งค่าการดึงเป็นประจำฉันต้องการที่จะระงับข้อความเหล่านั้นในบันทึกของฉัน การดูหน้าคู่มือแนะนำว่า-qควรจะทำงานได้ แต่นั่นเป็นเพียง quiets ข้อความจาก SCP เอง ฉันจะทำสิ่งนี้ได้อย่างไร

3
มีวิธีที่จะมีฟังก์ชั่นในสคริปต์อัตโนมัติทุบตีของฉันทำงานกับข้อผิดพลาดคำสั่งใด ๆ ?
ฉันกำลังเขียนเชลล์สคริปต์ที่ต้องทำพวงคำสั่งและทุกคำสั่งขึ้นอยู่กับทุกคำสั่งก่อนหน้า หากคำสั่งใด ๆ ล้มเหลวสคริปต์ทั้งหมดควรล้มเหลวและฉันเรียกใช้ฟังก์ชัน exit ฉันสามารถตรวจสอบรหัสออกของแต่ละคำสั่ง แต่ฉันสงสัยว่ามีโหมดที่ฉันสามารถเปิดใช้งานหรือวิธีการทุบตีให้ทำโดยอัตโนมัติ ตัวอย่างเช่นใช้คำสั่งเหล่านี้: cd foo || myfunc rm a || myfunc cd bar || myfunc rm b || myfunc มีวิธีที่ฉันสามารถส่งสัญญาณไปยังเปลือกอย่างใดก่อนที่จะดำเนินการคำสั่งเหล่านี้ว่ามันควรจะเรียก myfunc หากพวกเขาล้มเหลวเพื่อให้ฉันสามารถเขียนสิ่งที่สะอาดเช่น: cd foo rm a cd bar rm b

4
ข้อผิดพลาดดิสก์เงียบและความน่าเชื่อถือของการแลกเปลี่ยน Linux
ความเข้าใจของฉันคือฮาร์ดไดรฟ์และ SSD ใช้การแก้ไขข้อผิดพลาดพื้นฐานภายในไดรฟ์และการกำหนดค่า RAID ส่วนใหญ่เช่น mdadm จะขึ้นอยู่กับสิ่งนี้เพื่อตัดสินใจว่าเมื่อใดที่ไดรฟ์ล้มเหลวในการแก้ไขข้อผิดพลาดและจำเป็นต้องออฟไลน์ อย่างไรก็ตามขึ้นอยู่กับการจัดเก็บที่ถูกต้อง 100% ในการวิเคราะห์ข้อผิดพลาด ไม่เช่นนั้นและการกำหนดค่าทั่วไปเช่นมิเรอร์ RAID-1 แบบสองไดรฟ์จะมีความเสี่ยง: สมมติว่าบิตบางส่วนบนไดรฟ์หนึ่งเสียหายอย่างเงียบ ๆ และไดรฟ์ไม่รายงานข้อผิดพลาดการอ่าน ดังนั้นระบบไฟล์เช่น btrfs และ ZFS จะใช้เช็คซัมของตัวเองเพื่อที่จะไม่ไว้วางใจเฟิร์มแวร์ของรถบั๊กกี้สายเคเบิลที่มีความผิดพลาดของสาย SATA และอื่น ๆ ในทำนองเดียวกัน RAM ยังมีปัญหาความน่าเชื่อถือและทำให้เรามี ECC RAM เพื่อแก้ไขปัญหานี้ คำถามของฉันคือสิ่งที่เป็นวิธีที่บัญญัติในการป้องกันไฟล์ swap Linux จากความเสียหายเงียบ / บิตเน่าไม่ได้จับโดยเฟิร์มแวร์ไดรฟ์ในการกำหนดค่าสองดิสก์ (เช่นการใช้ไดรเวอร์เคอร์เนล mainline)? สำหรับฉันแล้วดูเหมือนว่าการกำหนดค่าที่ไม่มีการป้องกันแบบครบวงจรที่นี่ (เช่นที่จัดทำโดย btrfs) จะลบล้างความสงบของจิตใจที่นำมาจาก ECC RAM แต่ฉันไม่สามารถคิดวิธีที่ดี: btrfs ไม่รองรับ swapfiles เลย คุณสามารถตั้งค่าอุปกรณ์ลูปจากไฟล์ …

2
ESRCH หมายถึงอะไร
ออกจาก: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html มันค่อนข้างชัดเจนอยู่เสมอว่าทำไมรหัส errnoจึงตั้งชื่อตามวิธีเฉพาะยกเว้นรหัสนี้ วิธีการที่ไม่SRCHเกี่ยวข้องกับไม่มีกระบวนการดังกล่าว ?

1
ฉันจะทดสอบความทนทานในการจัดการไฟล์เชลล์สคริปต์ได้อย่างไร
ฉันเขียนเชลล์สคริปต์ที่จัดการชื่อไฟล์ "ปกติ" บางตัว แต่ฉันอ่านแล้วทำไมเชลล์สคริปต์ของฉันถึงสำลักในช่องว่างหรืออักขระพิเศษอื่น ๆ และทำไมคุณไม่ควรแยกวิเคราะห์ผลลัพธ์ของ lsและฉันต้องการให้มันมีประสิทธิภาพมากกว่าและจัดการชื่อไฟล์ที่ถูกต้อง (และ / หรือชื่อไดเรกทอรี) ฉันจะสร้างไฟล์ทดสอบและไดเรกทอรีเพื่อเรียกใช้สคริปต์ของฉันได้อย่างไร

3
วิธีปฏิบัติที่ดีที่สุดในการใช้ $? ในทุบตี?
เมื่อฉันอ่านคำตอบนี้เกี่ยวกับ $? คำถามอื่นอยู่ในใจ มีวิธีปฏิบัติที่ดีที่สุดสำหรับวิธีใช้ $ หรือไม่ ในทุบตี? ลองมาตัวอย่าง: เรามีสคริปต์แบบเส้นตรงและฉันต้องการทราบว่าคำสั่งทั้งหมดจะทำงานได้ดี คุณคิดว่าเป็นการดีไหมที่จะเรียกใช้ฟังก์ชั่นเล็ก ๆ (ลองเรียกมันว่า "did_it_work") เพื่อตรวจสอบรหัสข้อผิดพลาดและแตกถ้าไม่ได้ #!/bin/bash function did_it_work { code=$1 if [ "$code" -ne "0" ] then echo "Error failure: code $code " exit 1 fi } dir=some/path mkdir -p $dir did_it_work $? cd $dir did_it_work $? run_some_command did_it_work $? แน่นอนว่าวิธีการนี้หมายความว่าฉันต้องแก้ไขปัญหาด้วยตนเองหากมีและเรียกใช้สคริปต์อีกครั้ง …

4
blk_update_request: ข้อผิดพลาด I / O, dev fd0, เซกเตอร์ 0
ฉันเพิ่งเริ่มสังเกตเห็นblk_update_request: I/O error, dev fd0, sector 0ข้อผิดพลาดบางอย่างในคอมพิวเตอร์เครื่องที่สองของฉันที่ใช้ Arch Linux ที่ฉันใช้เป็นเซิร์ฟเวอร์ สิ่งนี้เริ่มต้นเมื่อฉันต้องรีบูทคอมพิวเตอร์เมื่อฉันย้ายเข้าอพาร์ทเมนต์ใหม่ ฉันมีการ/etc/fstabกำหนดค่าต่อไปนี้: # # /etc/fstab: static file system information # # <file system> <dir> <type> <options> <dump> <pass> #UUID=94880e53-c4d3-4d4d-a217-84c9ac58f4fd /dev/sda1 / ext4 rw,relatime,data=ordered 0 1 #UUID=c1245aca-bbf7-4813-8c25-10bd0d95631e /dev/sda2 none swap defaults 0 0 #UUID=94880e53-c4d3-4d4d-a217-84c9ac58f4fd /dev/sdb1 /media/marcel/videos auto rw,user,auto 0 0 ดังนั้น …

4
โปรแกรม Bash ไม่ทำงานหากการเปลี่ยนเส้นทางจะล้มเหลว
ใน bash ฉันสังเกตเห็นว่าหากคำสั่งที่ใช้การเปลี่ยนเส้นทางจะล้มเหลวโปรแกรมใด ๆ ที่ทำงานก่อนหน้านั้นจะไม่ทำงาน ตัวอย่างเช่นโปรแกรมนี้เปิดไฟล์ "a" และเขียน 50 ไบต์ไปยังไฟล์ "a" อย่างไรก็ตามการรันคำสั่งนี้ด้วยการเปลี่ยนเส้นทางไปยังไฟล์ที่มีสิทธิ์ไม่เพียงพอ (~ root / log) ทำให้ไม่มีการเปลี่ยนแปลงขนาดไฟล์ของ "a" $ ./write_file.py >> ~root/log -bash: /var/root/log: Permission denied cdal at Mac in ~/experimental/unix_write $ ls -lt total 16 -rw-rw-r-- 1 cdal staff 0 Apr 27 08:54 a <-- SHOULD BE 50 BYTES …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.