1.เช็ค Log ของ Asterisk
เผื่อมี Error ที่ซีเรียส
- โค้ด: เลือกทั้งหมด
cat /var/log/asterisk/messages
[Feb 17 23:21:44] NOTICE[30407] cdr.c: CDR simple logging enabled.
[Feb 17 23:21:44] NOTICE[30407] loader.c: 181 modules will be loaded.
[Feb 17 23:21:44] NOTICE[30407] res_smdi.c: No SMDI interfaces are available to listen on, not starting SMDI listener.
[Feb 17 23:21:44] WARNING[30407] chan_dahdi.c: Ignoring any changes to 'userbase' (on reload) at line 23.
[Feb 17 23:21:44] WARNING[30407] chan_dahdi.c: Ignoring any changes to 'vmsecret' (on reload) at line 31.
[Feb 17 23:21:44] WARNING[30407] chan_dahdi.c: Ignoring any changes to 'hassip' (on reload) at line 35.
[Feb 17 23:21:44] WARNING[30407] chan_dahdi.c: Ignoring any changes to 'hasiax' (on reload) at line 39.
[Feb 17 23:21:44] WARNING[30407] chan_dahdi.c: Ignoring any changes to 'hasmanager' (on reload) at line 47.
[Feb 17 23:21:44] WARNING[30407] res_config_mysql.c: MySQL RealTime: No database user found, using 'asterisk' as default.
[Feb 17 23:21:44] WARNING[30407] res_config_mysql.c: MySQL RealTime: No database password found, using 'asterisk' as default.
[Feb 17 23:21:44] WARNING[30407] res_config_mysql.c: MySQL RealTime: No database host found, using localhost via socket.
[Feb 17 23:21:44] WARNING[30407] res_config_mysql.c: MySQL RealTime: No database name found, using 'asterisk' as default.
[Feb 17 23:21:44] WARNING[30407] res_config_mysql.c: MySQL RealTime: No database port found, using 3306 as default.
[Feb 17 23:21:44] WARNING[30407] res_config_mysql.c: MySQL RealTime: No database socket found, using '/var/lib/mysql/mysql.sock' as default.
[Feb 17 23:21:44] WARNING[30407] res_config_mysql.c: MySQL RealTime: No database socket found (and unable to detect a suitable path).
[Feb 17 23:21:44] NOTICE[30407] config.c: Registered Config Engine mysql
[Feb 17 23:21:44] WARNING[30407] utils.c: trying to reset empty pool
[Feb 17 23:21:44] WARNING[30407] utils.c: trying to reset empty pool
[Feb 17 23:21:44] WARNING[30407] utils.c: trying to reset empty pool
[Feb 17 23:21:44] NOTICE[30407] chan_skinny.c: Configuring skinny from skinny.conf
[Feb 17 23:21:44] WARNING[30407] translate.c: plc_samples 160 format f
[Feb 17 23:21:44] ERROR[30407] codec_dahdi.c: Failed to open /dev/dahdi/transcode: No such file or directory
[Feb 17 23:21:44] NOTICE[30407] pbx_ael.c: Starting AEL load process.
[Feb 17 23:21:44] NOTICE[30407] pbx_ael.c: AEL load process: parsed config file name '/etc/asterisk/extensions.ael'.
[Feb 17 23:21:44] NOTICE[30407] pbx_ael.c: AEL load process: checked config file name '/etc/asterisk/extensions.ael'.
[Feb 17 23:21:44] NOTICE[30407] pbx_ael.c: AEL load process: compiled config file name '/etc/asterisk/extensions.ael'.
[Feb 17 23:21:44] NOTICE[30407] pbx_ael.c: AEL load process: merged config file name '/etc/asterisk/extensions.ael'.
[Feb 17 23:21:44] NOTICE[30407] pbx_ael.c: AEL load process: verified config file name '/etc/asterisk/extensions.ael'.
ดูๆแล้วก็ไม่มีอะไรซีเรียสครับ หนักที่สุดก็จะเกี่ยวกับ MySQL นั่นเป็นเพราะเรายังไม่ได้สร้างดาต้าเบสให้มัน
2. จุดที่ควรตรวจเช็คถ้ารัน Asterisk ไม่ได้
ถ้าเราสามารถสั่งรัน Asterisk ได้ก็แสดงว่าไม่มีปัญหาอะไร แต่ถ้ารันไม่ได้หล่ะก็ผมมีขั้นตอนแนะนำดังต่อไปนี้ครับ
15.1 เช็คว่าได้ทำตามขั้นตอนที่ผมแนะนำไว้หรือเปล่า มีข้ามขั้นตอนไหนไปบ้างหรือเปล่า แต่ละขั้นตอนมีเออเร่อร์อะไรหรือเปล่า (ถ้ามีเออเร่อร์ก็โพสมาให้ผมดูก็ได้นะครับ ผมจะได้ช่วยดู)
15.2 ลองเข้าไปดูที่ไดเร็คตอรี่ /var/log/asterisk ซึ่งเป็นที่เก็บ Log ของ Asterisk ดูที่ไฟล์ชื่อ messages แล้วก็จะเห็นปัญหาว่าทำไมถึงรัน Asterisk ไม่ได้ แก้ไขแล้วก็ลองใหม่นะครับ
16 ดู Log ที่ไฟล์ /var/log/asterisk/messages
ไฟล์ /var/log/asterisk/messages นี้จะเก็บทุกเหตุการณ์ที่เกิดขึ้นใน Asterisk ตั้งแต่เริ่มต้นสตาร์ทโปรแกรมไปจนถึงหยุดทำงาน ไฟล์นี้นอกจากจะเก็บเหตุการณ์แล้วยังเก็บปัญหาที่เกิดขึ้นในระหว่างการทำงานด้วยนะครับโดยเฉพาะตอนเริ่มต้นสตาร์ท ตอนสตาร์ทครั้งแรกเราควรเข้ามาดูที่ไฟล์นี้เพื่อดูว่าเกิดปัญหาอะไรบ้าง บางปัญหาก็ไม่สำคัญจนทำให้ Asterisk สตาร์ทไม่ได้ แต่บางปัญหาก็ใหญ่มากจน Asterisk สตาร์ทไม่ได้
ปัญหาที่มักจะพบเจอก็คือ ปัญหาการโหลดโมดูลและไฟล์คอนฟิก ซึ่งบางโมดูลมันทำงานเดี่ยวๆไม่ได้ต้องใช้ฮาร์ดแวร์หรือโปรแกรมอื่นๆร่วมด้วย แน่นอนว่าถ้าเราไม่ได้ติดตั้งไว้โมดูลมันก็ทำงานไม่ได้ (ถูก Asterisk โหลดขึ้นมาแต่ก็ทำงานไม่ได้) เราก็ต้องบอก Asterisk ว่าไม่ต้องโหลดนะ ก็จะไม่มีเออเร่อร์
ลองมาดูไฟล์ /var/log/asterisk/messages ในเครื่องของผมกันครับ
แสดงทั้งหมด
- โค้ด: เลือกทั้งหมด
cat /var/log/asterisk/messages
แสดงทีละหน้า
- โค้ด: เลือกทั้งหมด
cat /var/log/asterisk/messages | more
[Jan 9 02:11:06] ERROR[32767] res_config_ldap.c: No directory URL or host found.
[Jan 9 02:11:06] NOTICE[32767] res_config_ldap.c: Cannot load LDAP RealTime driver.
เป็นเออเร่อร์ที่บอกว่าคอนเน็คกับ LDAP ไม่ได้ (เพราะเราไม่ได้ติดตั้ง LDAP) ต้องไม่ให้ Asterisk โหลดโมดูลชื่อ res_config_ldap.so
[Jan 9 02:11:06] NOTICE[32767] res_smdi.c: No SMDI interfaces are available to listen on, not starting SMDI listener.
ติดต่อกับ SMDI interface ไม่ได้ ต้องไม่ให้โหลดโมดูลชื่อ res_smdi.so
[Jan 9 02:11:06] ERROR[32767] res_config_pgsql.c: PostgreSQL RealTime: Failed to connect database asterisk on 127.0.0.1:
[Jan 9 02:11:06] WARNING[32767] res_config_pgsql.c: PostgreSQL RealTime: Couldn't establish connection. Check debug.
ติดต่อกับดาต้าเบส Postgres ไม่ได้เพราะไม่ได้ติดตั้งไว้ ต้องไม่ให้โหลดโมดูลชื่อ res_config_pgsql.so
[Jan 9 02:11:06] WARNING[32767] res_config_mysql.c: MySQL RealTime: No database user found, using 'asterisk' as default.
[Jan 9 02:11:06] WARNING[32767] res_config_mysql.c: MySQL RealTime: No database password found, using 'asterisk' as default.
[Jan 9 02:11:06] WARNING[32767] res_config_mysql.c: MySQL RealTime: No database host found, using localhost via socket.
[Jan 9 02:11:06] WARNING[32767] res_config_mysql.c: MySQL RealTime: No database name found, using 'asterisk' as default.
[Jan 9 02:11:06] WARNING[32767] res_config_mysql.c: MySQL RealTime: No database port found, using 3306 as default.
[Jan 9 02:11:06] WARNING[32767] res_config_mysql.c: MySQL RealTime: No database socket found, using '/var/lib/mysql/mysql.sock' as default.
[Jan 9 02:11:06] WARNING[32767] res_config_mysql.c: MySQL RealTime: No database socket found (and unable to detect a suitable path
ติดต่อฐานข้อมูล MySQL ได้แต่หาดาต้าเบสไม่เจอ (เพราะเรายังไม่ได้สร้าง) เดี๋ยวจะสร้างทีหลัง
[Jan 9 02:17:15] WARNING[864] loader.c: Error loading module 'chan_h323.so': /usr/lib/asterisk/modules/chan_h323.so: undefined symbol: _ZNK7PObject7CompareERKS_
[Jan 9 02:17:15] WARNING[864] loader.c: Module 'chan_h323.so' could not be loaded.
โหลดโมดูล chan_h323.so ไม่ได้ (แต่เราอาจต้องใช้โมดูลนี้เพื่อให้ Asterisk รองรับ H.323)
ที่ผมเอามาให้ดูนี้เป็นตัวอย่างเออเร่อร์ที่อยู่ในไฟล์นะครับ ถ้ามีปัญหาเรื่องการโหลดโมดูล (ซึ่ง Asterisk เก็บโมดูลไว้ที่โฟลเดอร์ /usr/lib/asterisk/modules) ก็ต้องไม่ให้ Asterisk โหลดโมดูลนั้นขึ้นมา ถ้าเราไม่ได้ใช้งานโมดูลที่มีปัญหานั้นก็คงไม่เป็นไรครับ แต่ถ้าเป็นโมดูลที่เราต้องใช้เราต้องมาหาทางแก้ปัญหา
ในโฟลเดอร์ /etc/asterisk จะมีไฟล์หนึ่งชื่อ modules.conf ซึ่งจะบอก Asterisk ว่าให้โหลด (หรือไม่โหลด) โมดูลไหนบ้าง มาดูที่ไฟล์นี้กันครับ
[modules]
autoload=yes
noload => pbx_gtkconsole.so
noload => chan_alsa.so
ซึ่ง Asterisk จะโหลดทุกโมดูลที่ไม่ได้ระบุ noload ไว้ ดังนั้นถ้าเราไม่ต้องการให้ Asterisk โหลดโมดูลไหนก็เพิ่มบรรทัด noload ตามด้วยชื่อโมดูล ตัวอย่างเช่นไม่ให้โหลดโมดูล res_config_ldap.so, res_config_pgsql.so, res_smdi.so ก็เพิ่มบรรทัดต่อไปนี้ไว้ที่ส่วนล่างๆของไฟล์ modules.conf นะครับ
noload => res_config_ldap.so
noload => res_config_pgsql.so
noload => res_smdi.so
ดังนั้นในไฟล์ /etc/asterisk/modules.conf จะกลายเป็น
[modules]
autoload=yes
noload => pbx_gtkconsole.so
noload => chan_alsa.so
noload => res_config_ldap.so
noload => res_config_pgsql.so
noload => res_smdi.so
แล้วรีสตาร์ท Asterisk ใหม่
17 ไม่ให้ Asterisk โหลดโมดูลที่ไม่ได้ใช้งาน
มีอยู่หลายโมดูลที่เราจะไม่ได้ใช้งานครับ เช่น
chan_mgcp.so สำหรับ VoIP โปรโตคอล MGCP
chan_skinny.so สำหรับ VoIP โปรโตคอล Skinny
res_config_ldap.so สำหรับดึงคอนฟิกมาจาก LDAP server และส่งไปเก็บ
res_smdi.so สำหรับอินเตอร์เฟสกับ SMDI
res_config_pgsql.so สำหรับดึงคอนฟิกมาจากดาต้าเบส Postgresql และส่งไปเก็บ
ให้เพิ่มบรรทัด noload ไว้ในไฟล์ /etc/asterisk/modules.conf ดังนี้ครับ
noload => res_config_ldap.so
noload => res_smdi.so
noload => res_config_pgsql.so
noload => chan_mgcp.so
noload => chan_skinny.so
เซฟไฟล์ และรีสตาร์ท Asteisk ใหม่ หรือแค่เซฟไว้เฉยๆก็ได้ครับ รอรีโหลดเมื่อมีโอกาส
ติดตั้ง Asterisk+CentOS ตอนที่ 3