Showing posts with label signal. Show all posts
Showing posts with label signal. Show all posts

Friday, October 26, 2012

UNIX Programming

signal

ในตอนนี้เราจะพูดถึงการรับมือกับ signal ไม่ว่าจะมาจากภายนอก เช่น interrupt หรือจากในภายในโปรแกรมเอง และเนื่องจากว่า ในภายในตัวโปรแกรมเองนั้น ไม่มีอะไรน่าสนใจมากไปกว่า การอ้างถึงหน่วยความจำ ที่อ้างไม่ถึง หรือ อยู่นอกขอบข่ายที่จะอ้างอิงถึงได้ กับ การใช้คำสั่งที่แปลกประหลาด เราจึงมุ่งความสนใจไปที่ signal จากภายนอก เช่น

  • interrupt เมื่อมีการกดปุ่ม Delete
  • quit เมื่อกดปุ่ม FS
  • hangup เมื่อเกิดการวางสายโทรศัพท์ลง
  • terminate เมื่อได้รับคำสั่ง kill
เมื่อเกิด เหตุการ, event, เหล่านี้ขึ้น signal จะได้รับการส่ง หรือ ประกาศไปยังทุก process ที่ทำงานบน terminal นั้นๆ ซึ่งหากไม่มีการตระเตรียมอื่นใดเป็นพิเศษแล้ว signal มักจะหยุดการทำงานของ process และในกรณีของ quit จะได้แฟ้มเสมือน ในหน่วยความจำ ในขณะนั้นมาให้ เพื่อตรวจสอบดู หรือ debug ในภายหลัง
routine ที่เปลี่ยนแปลงการกระทำโดยปริยายเมื่อได้รับ signal ก็คือ signal() ซึ่งใช้ชื่อเดียวกันเอง รูทีนนี้ หรือ function นี้ต้องการอาร์กิวเม้นต์ ๒ ตัว คือ
  • ตัว signal
  • บอกว่าจะทำอะไร อย่างไรกับ signal นี้
ค่าแรกนั้น เป็นเพียงตัวเลขที่นิยามเอาไว้เท่านั้นเอง ไม่ได้มีความหมายอะไรมากนัก แต่ค่าที่สองนั้น เป็น address ซึ่งชี้ไปที่ function หรือ คำสั่งประหลาดยากแก่การเข้าใจ แต่โดยทั่วไป ก็ว่า ให้ละความสนใจ signal นี้ หรือ ให้ปฏิบัติตามข้อตกลงโดยปริยายของ signal นี้ที่กำหนดเอาไว้แล้ว อย่างไรก็ดี แฟ้ม signal.h ต้องระบุเอาไว้ด้วย เพื่อการเรียกใช้งาน signal ต่างๆ

#include <signal.h>

signal(SIGINT, SIG_IGN);

คำสั่งข้างบนนั้นเป็นเหตุให้ การ interrupt นั้นได้รับการละเลยไปเสีย กล่าวคือ ไม่ต้องไปสนใจอะไร นั่นเอง ขณะที่

signal(SIGINT, SIG_DFL);

นั้น จะนำการปฏิบัติการ ตามค่าปริยายกลับคืนมา ซึ่งก็คือ จบงาน

ในทุกกรณี signal() จะคืนค่าเดิมของ signal มาให้
ที่ยกมาให้ทราบเป็นตัวอย่างนี้ อาร์กิวเม้นต์ที่สองของ signal เป็นค่าคงที่ แต่มันสามารถ เป็นชื่อของฟังก์ชั่นใดใด ก็ได้ แต่ต้องระบุเอาไว้ก่อน ให้เป็นที่เรียบร้อย ในกรณีนี้ ฟังก์ชั่นชื่อดังกล่าวนี้ จะถูกเรียกมาใช้งาน เมื่อเกิด signal ขึ้นมา ซึ่งการใช้งาน ก็จะเป็นไปในกรณีที่ โปรแกรมต้องการลบแฟ้มขยะออก ก่อนที่จะจบงาน เสียเป็นส่วนมาก ตัวอย่างของ code ประเภทนี้ ก็อาจจะเป็น

#include <signal.h>

main()
{
     int onintr();

     if (signal(SIGINT, SIG_IGN) != SIG_IGN);
         signal(SIGINT, onintr);

/* process ...
 */
      exit(0);
}

onintr()
{
     unlink(tempfile);
     exit(1);
}

ความวุ่นวาย มันก็อยู่ที่ประโยค if () นั่นแหละ ตรงที่ต้องเรียก signal() สองหน

เรื่องก็มีอยู่ว่า ในกรณีของ interrupt นั้น signal จะส่งไปยังทุก process ที่ทำงานบน terminal นั้นๆ ที่นี้ ขอให้ดูบางโปรเซส ที่เขาทำงาน  โดยไม่ต้องการการรบกวนใดใด จากแป้นพิมพ์เลย งานแบบนี้ จะหยุดก็เมื่องานเสร็จ หรือเกิดอุบัติเหตุบางอย่างเท่านั้น ดังนั้น จึงสามารถสั่งงานประเภทนี้ ให้วิ่งในลักษณะของ background ได้ ก็คำสั่ง จาก shell ที่มีตัว & ปิดท้ายนั่นเอง , ให้สังเกตุตัวคำสั่งด้วย
signal(SIGINT, SIG_IGN)
ซึ่งระบุเอาไว้ว่า ถ้ามี interrupt เข้ามาก็ไม่ต้องไปสนใจน่ะ

ทีนี้ ถ้าหากว่า ตัวอย่างโปรแกรมข้างบนนั้น ทำงานเลย โดยไม่ต้องไปตรวจดูว่า signal เดิม ที่ตั้งเอาไว้นั้น คืออะไร ก็ไยมิใช่เท่ากับว่า ความพยายามที่จะทำงานให้เสร็จ นั้น ล้มเหลว จริงไหมครับ

ดังนั้น เราจึงดูว่าค่า signal ของ signal() ที่กำหนดไว้เดิมนั้น ใช่ ignore (SIG_IGN) หรือไม่ แล้วค่านี้จะได้มาก็โดยการเรียกด้วย signal() เท่านั้น นี่คือนัยยะของบรรทัด if() นั้น

บรรทัดถัดมานั่นจึงเป็นการส่ง signal ที่แท้จริง กล่าวคือ ให้ไปทำงานใน function onintr() น่ะ หากมีสัญญาน interrupt มาแล้ว ก็เท่านี้แหละ

นอกจากนี้แล้ว นิยาม หรือค่าที่กำหนดใน SIG_DLF, SIG_IGN เองก็ น่าเกลียด น่ากลัวเอามากมากพอ จนไม่อยากให้เรียกตรงๆ แต่กำหนดผ่าน #define เอา ก็ลองดูซิว่า จะเข้าใจหรือเปล่า

#define     SIG_DFL  (int (*)())0
#define     SIG_IGN  (int (*)())1

ยังมีสาระที่ขออนุญาตข้ามไปก่อน โดยเฉพาะในเรื่องของการ fork() นั้น จะไม่ขออธิบายละ แต่ยกเอา code สั้นๆมาให้ดูชมกัน แล้วพิจารณาเอาเองว่า ทำไม และขอยุติลงไว้แต่เพียงเท่านี้

if (fork() == 0)
      execl( .. );
signal(SIGINT, SIG_IGN);
wait(&status);
signal(SIGINT, onintr);

Monday, September 10, 2012

UNIX Programming

บทแทรก ในเรื่องของการเริ่มต้น และสิ้นุด process

จาก เอกสารอ้างอิง ทำให้ทราบว่า แฟ้มที่เรียกมาทำงานให้ ที่ถูกสร้างโดย link editor ก่อนที่จะเขียนแฟ้มลงบน hard disk นั้น เขาจะเรียก system startup routines มา กำหนดตำแหน่งเริ่มต้นของโปรแกรม ของหน่วยความจำไว้ด้วย และ system startup routine นี้จะทำงานก่อนที่เขาจะไปเรียก main function มาอีกทีหนึ่ง

ดังนั้น เมื่อ kernel สั่งให้แฟ้มนี้ทำงาน, หรืออีกนัยหนึ่ง เมื่อ kernel เริ่มต้น process, จะไม่เรียก main function มาตรงๆ แต่จะเริ่มต้นด้วย system startup routine ดังกล่าว   แล้ว kernel ก็จะส่งผ่านค่าต่างๆ ไม่ว่าจะเป็น command line หรือ ค่าตัวแปรสภาพแวดล้อมการทำงาน ไปให้ process นั้นทาง system startup routine ที่ว่ามานี้แหละ

system startup routine เมื่อได้รับสรรพสิ่งครบถ้วนแล้ว จึงไปเรียก main funtion ให้มาทำงานไป แล้วก็คอยดูว่า main function จะกลับมาเมื่อไหร่  คงเสมือน สาวน้อยคอยคนรัก อะไรทำนองนั้น และที่สุดแล้ว เขา, system startup routine, ก็จะจบ process ด้วยคำสั่งที่คล้ายๆกันนี้

exit(main(argc,argv));

หากว่าเขียนด้วยภาษา C น่ะ แต่โดยทั่วไปแล้ว system startup routine จะเขียนด้วยภาษา assembly

ทีนี้ ตัว main function เองนั้นเมื่อจบงาน เขาจบได้ ๒ แบบ คือ
  1. จบงานแบบปกติ (หรือตายดี) ซึ่งก็มีอีกว่า เลือกตายยังไง ได้ตั้ง ๓ แบบ ดังนี้ 
    • กลับจาก function main() ธรรมดา กลับเฉยๆ เที่ยวอิ่มครบหมดแล้ว เจอทางออกก็กลับ
    • เรียก function exit()
    • เรียก function _exit()
  2. จบงานไม่ปกติ (หรือตายด้วยอุบัติเหตุ ถูกฆาตรกรรม ฆ่าตัวตาย ฯลฯ)  ซึ่งมีอยู่อีก ๒ ทางเลือก คือ
    • เรียก function abort()
    • ได้รับ signal ให้เลิก
ซึ่งแต่ละรายการ จะยังไม่ขอแทรกมากไปกว่านี้
และตัว exit(main(argc,argv)) ที่ยกมาข้างบนนั้น ก็จะบ่งบอกสถานะของ main() ได้อย่างดีว่า จบยังไง จาก ๕ รายการ ของ ๒ หมวดนั้น แล้วก็ส่งสถานะนี้ให้กับ kernel ต่อไป

ค่าแสดงสถานะ (อาจจะเป็นค่าจีดีพี หรือ อินแฟล้ทฌั่น หรือ คะแนนนิยมหรือ ค่ามัธยมฐาน ของอะไรสักอย่าง) นี้ kernel ก็จะเก็บไว้ในตัวแปรสภาพแวดล้อมการทำงาน ของ ผู้ที่เรียกโปรแกรมนี้ ขึ้นมาอีกทีหนึ่ง ซึ่งเขาก็เอาไปประเมินว่า โปรแกรมนั้นทำงานได้ผล ไม่ได้ผล อย่างไรต่อไป

พอเข้าใจมั้ยครับนี่
ดีน่ะ ล้วนแล้วแต่เป็นผู้ที่แนะนิดก็กระจ่างกันหมด

ขอขอบคุณ ที่สละเวลามาอ่านครับ

Sunday, August 22, 2010

syslog: The system events logger

commandsจาก the white book ที่สงกาอยู่ว่า ทำไมจึงไม่มีเรื่องราวของ syslog อยู่ให้เห็นเลย จึงหยิบมาพลิกดูอีกหน ก็พบเข้าเต็มๆ เขาเขียนไว้ในเรื่องของ Essentail Administrative Tools and Techniques โดยจำเพาะ ซุกอยู่ในนั้น

ขออภัยผู้แต่งไว้ ด้วย ที่ไปกล่าวหาว่า ไม่มีเรื่องนี้อยู่

จะมาเสริมให้ ต่อไปจากเล่มแดง อย่างเข้มข้น



ฝรั่งเข้ามีหนังสืออ้างอิง เมื่อพูดถึง UNIX อยู่ ๒ เล่ม เรียกขานกันตามสีปก คือ
  • the red book
  • the white book
ซึ่งจัดพิมพ์มานานมากแล้ว และปรับปรุงมาเรื่อย ให้เข้ากับการเปลี่ยนแปลงทางวิชาการ และความต้องการ โดยเฉพาะ เล่มแดง นั้นเ ชาวน้องลี ย่อมรู้จักดี เพราะทำมาโดยเฉพาะ ชัดๆเลย แต่สีปก ไม่ใช่แดงเท่านั้นเอง

เล่มที่ มะไฟ มี เป็น 2nd ed. ความจริง มีทั้งสอง edition แต่ฉบับแรก เปียกฝน เสียหายอ่านไม่ได้ไปหลายหน้าแล้ว เลยหามาใหม่ อ่านเล่น เพลินดี

Thursday, August 19, 2010

syslog: The system events logger

commands
มาต่อกันอีกจากตอนที่แล้ว ที่นำเสนอในส่วนของ รายละเอียดของ facilities ของแฟ้ม /etc/syslog.conf ที่จบลงตรงตัวอย่างของ ชื่อของ facility และ severity level ของข้อมูลข่าวสาร

ตัว syslogd เอง ก็สามารถใช้เป็น facility ได้ด้วยน่ะ ลืมบอกไป แต่ facility mark ก้ต้องระบุด้วย

การที่ข่าวสารจากโปรแกรม หรือ facility ต่างๆจะถูกบันทึกไว้นั้น ก็ต้องพิจารณาด้วยว่า สำคัญพอที่จะบันทึกไว้หรือเปล่า เป็นเกณฑ์ กล่าวคือ severity level นั้นต้องมากกว่า หรือ เท่ากับที่ระบุไว้เท่านั้น action ถึงจะได้รับการพิจารณาให้กระทำ หรือ ดำเนินการได้

ในตัวอย่างที่ยกมาถึง severity level นั้น เรียงลำดับความสำคัญลดหลั่นลงมาตามลำดับน่ะ อันสูง สำคัญมากกว่าอันต่ำลงมา ๑ ระดับ แบบนี้แหละ ก็ลองไปไล่ๆดูเอาน่ะพี่น้อง

สำหรับ action นั้น มีพอให้ดูเป็นแนวทางอยู่ดังนี้
  • filename เขียนข่าวสารนั้นๆ ลงเครื่องนั้นเลยด้วยชื่อแฟ้มที่ระบุมานี่แหละ
  • @hostname ให้ส่งข่าวสารไปยัง syslogd ของเครื่องที่ระบุชื่อไว้นี่แหละ
  • @ipaddress คล้ายๆข้างบนนั้น แต่เป็นหมายเลข ip แทนชื่อเครื่อง
  • user1,user2,... เขียนลงที่หน้อจอของ ผู้ใช้งานตอนที่เขา login
  • * เขียนข่าวสารไปยังผู้ใช้งานทุกคนที่ logged in อยู่
มีข้อควรระวังคือ ถ้าใช้ filename แล้ว ชื่อต้องระบุแบบสมบูรณ์

ในตำราเล่มแดง เขาบอกด้วยว่า สามารถใช้ร่วมกับ m4 ได้ด้วย ก็สะดวกไป แต่ต้องใช้ m4 เป็น

ในเครื่องของท่าน สมควรมีตัวอย่างให้ดูน่ะ ลองๆไล่ดูเอาเอง

ในเล่มแดง เขายกโปรแกรมที่ใช้บริการของ syslogd มาให้ดู เช่น
ftpd ใช้ facility daemon ที่ level เป็น err-debug และ
named ใช้ facility daemon และ level เป็น err-info

สำหรับการเขียนโปรแกรมด้วยนั้น ขอให้ติดต่อมาเป็นการส่วนตัวก็แล้วกัน แต่ถึงอย่างนั้น หากสนใจก็แวะไปดู แฟ้ม syslog.h ก่อนก็ได้ เพราะ[ซึ่ง]เรียกใช้เสมอ ไม่ว่าจะเป็น openlog(), syslog(), closelog()

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

ขอขอบคุณที่อ่านมาจนถึงถ้อยคำนี้

Wednesday, August 18, 2010

syslog: The system events logger

commands
ต่อจาก ตอนแรก ที่หนุดไว้ตรง แฟ้มเอกสาร ที่ควบคุมพฤติกรรมการทำงานของ syslogd ที่เปรียบเสมือนเอกสารกำกับยา ที่ทุกคนที่รับยา พึงอ่าน

ตอนนี้ ใคร่ขอนำเสนอให้ได้สาระของแฟ้มดังกล่าวนั้น เท่าที่กำลังสติ ปัญญา จะอำนวยให้ (ที่นี่ มี สองท่าน ชื่อ ปัญญา แต่ สติ เนี่ย ของใคร ก็ของคนนั้น เด้อ)


จากท้ายตอนที่แล้วที่พูดถึงรูปแบบของแฟ้ม /etc/syslog.conf ที่เป็นแฟ้มเอกสารพื้นๆ, plain text, โดยอยู่ในรูป
selector<Tab>action
นั้น ได้ย้ำว่า <Tab> นั้น คือปุ่ม Tab บนแป้นพิมพ์เท่านั้น จะเป็น space หรืออย่างอื่นไม่ได้โดยเด็ดขาด ก็ขอให้ระมัดระวังในประเด็นนี้ให้มากด้วย มัน ปจฺจตฺตํ วิญฺญูหิ น่ะ ให้ลองดูเอง โดยเฉพาะพวกที่นิยม cut & paste นั้นแหละ ปวดหัวตายเอาง่ายๆ เพราะ หาที่ผิดพลาดไม่เจอ

ตัว selector เองนั้นจะมีไวยากรณ์เป็น facility.level ตัวอย่างเช่น
mail.info                /var/log/maillog
จะมีผลให้ข่าวสารจากระบบอีเล็กทรอนิคส์เมล์ ส่งไปเก็บไว้ที่แฟ้ม /var/log/maillog

นั่นคือ selector โดยเนื้อแท้แล้วก็คือ โปรแกรม, facility, ที่ส่งข้อมูลข่าวสาร และ ระดับความรุนแรงของข้อมูลข่าวสาร, level, ในรูปดังกล่าวมาแล้ว ซึ่ง ทั้งคู่นี้, facility & level ต้องเป็นชื่อที่กำหนดไว้แล้วเท่านั้นเอง จะเขียน หรือ ผลิตมาเอามิได้เลย แลพอแยก facility ออกเป็นกลุ่มได้ดังนี้
  • กุล่มของ kernel
  • กลุ่มของโปรแกรมอรรถประโยชน์ทั่วไป
  • กลุ่มของโปรแกรมที่เขียนขึ้นมาสำหรับใช้งานประจำเครื่องนั้นๆ
  • กลุ่มอื่นๆนอกไปจากนี้แล้ว รวมๆเรียกว่า user
นอกจากนี้ selector ยังสามารถใช้อีก ๒ คำ คือ * และ none ที่หมายถึง ทุกอย่าง หรือ ไม่เลยสักอย่าง

facility สามารถมีได้หลายตัว แต่ละตัว แยกกันด้วย comma ขณะเดียวกัน selector เอง ก็สามารถมีได้หลายตัวด้วยเช่นกัน โดยแยกกันด้วย semi-colon

ทุกสิ่ง ทุกอย่าง ล้วนแต่เอามา OR กันทั้งนั้น ข้อมูลข่าวสารใดใด ที่มี selector ตรง กับที่กำหนดไว้ ก็จะถูกนำไปยัง หรือ ส่งไปที่ action นั้นนั้น ตัวอย่างของ facility ก็ได้แก่
  • kern
  • mail
  • daemon
  • auth
  • cron
  • mark
  • fpt
และตัวอย่างของ severity levels ก็ได้แก่
  • emerg
  • alert
  • crit
  • err
  • warning
  • notice
  • info
  • debug
ความหมายของแต่ละคำ ใคร่ขอรบกวนให้ท่านไปศึกษาเอาเองจากระบบของท่าน ยกตัวอย่างเช่น mark นั้น เขาเอาไว้สำหรับบันทึกวันเดือนปีเวลา ที่ช่วงระยะใดๆที่กำหนดไว้ล่วงหน้า ซึ่งอันนี้ มีประโยชน์มาก เพราะอย่างน้อยก็ทราบว่า ปัญหาเกิดขึ้นในช่วงเวลาใด มันแคบลงมามาก ซึ่งยังดีกว่าที่จะรู้ว่า มันเกิดขึ้นเมื่อคืนนี้ หากเราสามารถกำหนดได้ว่า เมื่อคืนนี้ ที่เกิดเรื่อง อยู่ระหว่างชั่วโมงไหน ดั่งนี้ เป็นต้น

ตำราเขาเล่าเรื่องขำขำแบบฝรั่งเอาไว้ว่า หลาย sites ทีเดียว ที่เกิดปัญหาลึกลับ เพราะเครืองมันดับเอากลางดึก ทุกคืน ต่อเมื่อสืบทราบความจริงจึงทราบว่า เป็นเพราะแม่บ้านทำความสะอาด เธอนำเครื่องดูดฝุ่นมาเสียบเข้ากับเต้าเสียบไฟฟ้า ที่ใช้ร่วมกันกับคอมพิวเตอร์ ผลน่ะหรือ ไฟฟ้าก็กระเพื่อมน่ะซี แล้วอีทีนี้ คอมพิวเตอร์ หรืออุปกรณ์พ่วงอื่นๆ ก็พลอยดับ หรือ ล่ม ไป ก็เท่านั้นเอง, (อยู่ในหน้า ๒๐๙ เล่มแดง)

Tuesday, August 17, 2010

syslog: The system events logger

commands
ต่อจาก ตอนก่อนหน้านี้น่ะ ยกยอดมาเลย ดูดีกว่า

syslog เป็นโปรแกรมที่จัดการข้อมูลทั้งจาก kernel และ โปรแกรมอรรถประโยชน์ของระบบ เขียนโดย Eric Allman จาก Berkeley โปรแกรมนี้ มีข้อดีที่สำคัญ ๒ ประการคือ
  1. ทำให้ผู้พัฒนาโปรแกรม เป็นอิสระจากความจำเป็นที่ต้องมีการบันทึก log และ
  2. เอื้ออำนวยให้ ผู้บริหารระบบสามารถควบคุมการเก็บ log ได้
ก่อนหน้านี้ ต่างคน ต่างมีอิสระในการบันทึก log ของตัวของตัวไป ผู้บริหารระบบ ไม่สามารถควบคุมได้ว่าข้อมูลอันใดที่จะเก็บไว้ หรือ สมควรเก็บไว้ และ จะเก็บไว้ที่ไหน

syslog มีความหยืดหยุ่นพอสมควร กล่าวคือสามารถเรียงลำดับข่าวสารจากแหล่งกำเนิด และ ความสำคัญ(รวมๆเรียกแบบเหมาโหลว่า severity [security ขออภัย คำนี้ คัดลอกมาผิดครับ ที่ถูกคือ ซิเวียริตี้] level) ได้ และเปิดช่องทางของข่าวสารอันนั้น ไปยังจุดหมายปลายทางใดใดได้ เช่นลง log หรือ บน terminal ของผู้ใช้งานเอง หรือ เครื่องอื่นๆ ก้ยังได้

ความสามารถในการที่จะเป็นศูนย์กลางการ log ข่าวสารของเครือข่ายนี้เอง เป็นคุณสมบัติเด่นอันหนึ่งของเขา

syslog ประกอบด้วยสามองค์ใหญ่ๆคือ
  1. syslogd และ /etc/syslog.conf ตัวโปรแกรมที่ดำเนินการบันทึก และ แฟ้มที่บ่งบอกพฤติกรรมของเขา
  2. openlog, syslog,closelog รูทีนสำคัญๆที่อยู่ใน library ที่ผู้พัฒนาโปรแกรมใช้สำหรับส่งข้อมูลไปให้กับ syslogd และ
  3. logger คำสั่งในระดับผู้ใช้งาน ที่สามารถเรียกใช้เพื่อส่ง log ต่างๆ

syslogd อยู่ที่ /usr/sbin ส่วน logger อยุ่ที่ /usr/bin และ syslog เป็นรูทีนใน library ที่เป็นส่วนหนึ่งของ C standard library.

การทำงาน จะเป็นลักษณะนี้ โดยที่แรกเริ่ม syslogd จะวิ่งเมื่อเปิดระบบปฏิบัติการ โปรแกรมที่ทำงานร่วมกับ syslog จะเขียน log ลงไปยังแฟ้มพิเศษ ชื่อ /dev/log ส่วน syslogd จะอ่านข่าวสารจากแฟ้มนี้ ปรึกษาแฟ้มที่กำหนดพฤติกรรมของเขา แล้วแยกกระจายไปยังปลายทางต่างๆ ตามที่กำหนดไว้. syslogd จะอ่านข่าวสารต่างๆจาก kernel ด้วยเช่นกัน โดยอ่านจากอุปกรณ์ /dev/klog

สัญญาณควบคุม HUP จะทำให้ syslogd ปิดแฟ้ม log อ่านแฟ้มที่ควบคุมพฤติกรรมของเขาใหม่อีกครั้งหนึ่ง และ เริ่มต้นการบันทึกอีกระลอกใหม่ นั่นก็หมายความว่า หากมีการเปลี่ยนแปลงใดใดกับแฟ้มควบคุมพฤติกรรมของ syslogd แล้ว ท่านต้อง ส่งสัญญาณ HUP ให้กับ syslogd เพื่อว่า การเปลี่ยนแปลงนั้นๆ จะมีผลบังคับใช้ สัญญาณควบคุม TERM จะเป็นการสั่งยุติการทำงานของ syslogd

syslogd เขาจัเขียน process ID, PID, ไว้ที่แฟ้ม /var/run/syslog.pid ดังนั้น จึงสะดวกมาก สำหรับการสั่ง หรือ ส่งสัญญาณ ไปยัง process นั้นๆ ดังนี้ (โปรดใช้ความละเอียดถี่ถ้วนเป็นอย่างยิ่ง)
kill   -1   `/bin/cat /var/run/syslog.pid`
สัญญาณส่งผ่านคำสั่ง kill โดยเป็น option ของคำสั่ง ตามรูปแบบที่นำเสนอนี้ 1 หรือ HUP คือสัญญาณดังกล่าว

การบีบอัด และโยกย้ายแฟ้ม log จาก syslogd โดยพละการนั้น ไม่ดี และผลเสียมากเกินคาดคิดเลยทีเดียว ปกติระบบจะมีโปรแกรมเล็กๆช่วยงานลักษระนี้อยู่แล้ว

ในลำดับถัดไปจะนำเสนอส่วนของการควบคุมพฤติกรรมของ syslogd ซึ่งก็คือรายละเอียดของแฟ้ม /etc/syslog.conf ซึ่งสาระของแฟ้มนี้เขียนขึ้นด้วยอักษรธรรมดาๆ ไม่ต้องการอะไรมาก โดยมีข้อกำหนดว่า บรรทัดว่างๆ กับ บรรทัดที่ขึ้นต้นด้วย # นั้น มันจะไม่สนใจ มันจะสนใจก็ต่อเมื่อ บรรทัดนั้นๆ อยู่ในรูปแบบดังนี้
selector<Tab>action
โดยที่ <Tab> คือปุ่ม Tab บนแป้นพิมพ์ของท่าน และเป็นปุ่ม Tab เพียงเท่านั้น จะเป็นอย่างอื่นไปเสียไม่ได้ สำหรับ selector และ action นั้น จะได้นำมาเล่าต่อไป๚

View My Stats