วิธีกำหนดเวลางานใน Linux ด้วย Cron และ Crontab

วิธีกำหนดเวลางานใน Linux ด้วย Cron และ Crontab

คุณรู้หรือเปล่าว่า Blade Runner ตั้งขึ้นในปี 2019? สามปีนับจากนี้! ไม่ต้องพูดถึง กลับสู่อนาคต2 ที่ซึ่งพวกเขาเดินทางข้ามเวลาไปในปี 2015 แต่เราไม่มีรถบินได้ และไม่มีรถเลียนแบบในหมู่พวกเรา (เท่าที่ฉันรู้)





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





ผู้ใช้ Linux ทุกคนสามารถได้รับประโยชน์จากงานการจัดตารางเวลา ไม่ว่าจะเป็นงานที่เกี่ยวข้องกับระบบ (เช่น การล้างบันทึกเก่าและ อัพเดทแพ็คเกจ ) หรือให้บริการผู้ใช้ (กำลังตรวจสอบอีเมล กำลังดาวน์โหลดพอดแคสต์...) ผู้ใช้ Windows มี Task Scheduler ตั้งแต่ Windows 95 ยูทิลิตีที่ทำงานแบบเดียวกันบน Linux เรียกว่า cron และเราจะอธิบายวิธีใช้งานในที่นี้





คุณได้รับกรรมบน Reddit อย่างไร

โครนคืออะไร?

Cron เป็นบริการของระบบที่ทำงานอยู่เบื้องหลัง ตรวจสอบงานตามกำหนดเวลา และดำเนินการหากพบ งาน - เรียกอีกอย่างว่า ' งาน cron ' - ถูกกำหนดในไฟล์การกำหนดค่าพิเศษ (crontabs) ซึ่ง cron สแกนทุกนาที สามารถพบ cron หลายเวอร์ชันได้บนลีนุกซ์รุ่นต่างๆ ตัวอย่างเช่น ส้อม cron ของ Fedora เรียกว่า cronie และยังมี fcron , bron , และ ดีครอน . บางตัวมีคุณสมบัติพิเศษ ในขณะที่บางตัวเน้นเรื่องความปลอดภัยมากกว่า แต่ทั้งหมดมีพื้นฐานมาจากแนวคิดเดียวกัน

คู่มือนี้เขียนขึ้นสำหรับ vixie-cron ซึ่งเป็นเวอร์ชันที่แพร่หลายที่สุดของ cron และเป็นเวอร์ชันที่คุณจะพบใน Ubuntu และอนุพันธ์ แม้ว่าคำแนะนำส่วนใหญ่จะใช้กับการใช้งาน cron อื่นๆ ด้วย แต่อาจมีความแตกต่างเล็กน้อย ดังนั้นโปรดตรวจสอบคู่มือหากคุณตัดสินใจที่จะเปลี่ยน



Crontab คืออะไร?

หากคุณจริงจังกับการจัดการเวลา คุณอาจมีปฏิทินบางประเภท แอพหรือกระดาษอย่างน้อยหนึ่งแผ่น Crontab นั้นเหมือนกับปฏิทินในคอมพิวเตอร์ของคุณเป็นอย่างมาก มันเก็บข้อมูลเกี่ยวกับงานที่กำหนดเวลาไว้ โดยบอก cron ว่าคำสั่งใดที่จะรันในเวลาใด

ในความเป็นจริง crontabs หลายตัวอยู่ในระบบของคุณ ผู้ใช้ทุกคนมี crontab ของตัวเอง รวมถึงรูท (ผู้ดูแลระบบ) crontabs ของผู้ใช้ถูกเก็บไว้ใน





/var/spool/cron/crontabs/

. NS

crontab -l

คำสั่งจะแสดงรายการไฟล์ crontab สำหรับผู้ใช้ปัจจุบัน คุณสามารถตรวจสอบรูท crontab ด้วย





sudo crontab -l

.

นอกจากนี้ยังมีไฟล์ crontab ของระบบ

/etc/crontab

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

/etc/cron.hourly/

,

/etc/cron.daily/

,

/etc/cron.weekly/

, และ

/etc/cron.monthly/

โฟลเดอร์ และในการแจกแจงบางส่วน

/etc/cron.d/

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

วิธีกำหนดเวลางานด้วย Cron

ฟังดูง่าย: ในการกำหนดเวลางาน เพียงแค่เพิ่มงานลงใน crontab ของคุณ เนื่องจาก crontab เป็นไฟล์การกำหนดค่าพิเศษ จึงไม่แนะนำให้แก้ไขด้วยตนเอง ให้ใช้ .แทน

crontab -e

สั่งการ. ในการแก้ไขรูทหรือ crontabs ของผู้ใช้รายอื่น ให้รันคำสั่งด้วยสิทธิ์ระดับผู้ดูแลและเพิ่มชื่อผู้ใช้ของพวกเขาหลังตัวเลือก -u:

sudo crontab -u root -e
sudo crontab -u username -e

ไฟล์ crontab มีสองส่วน อันแรกประกอบด้วยตัวแปรสภาพแวดล้อมที่ตั้งค่าโดยอัตโนมัติ คุณสามารถเปลี่ยนตัวแปร PATH, HOME และ SHELL ได้อย่างปลอดภัย และแก้ไขตัวแปร MAIL

ส่วนที่สองของไฟล์คือ 'ตารางเวลา' จริงกับงานที่กำหนดเวลาไว้ของคุณ ทุกงานอยู่ในบรรทัด (แถว) ในตาราง โดยมีคอลัมน์ที่แสดงค่าต่อไปนี้:

ในการกำหนดเวลางานให้สำเร็จ คุณจำเป็นต้องรู้เล็กน้อยเกี่ยวกับไวยากรณ์ crontab:

  • ตัวเลขควรเป็นจำนวนเต็ม (จำนวนเต็ม) และคุณสามารถใช้เครื่องหมายดอกจัน (*) ในคอลัมน์ใดก็ได้เป็นอักขระตัวแทน ซึ่งหมายถึง 'ทุกนาที/วัน/เดือน...'
  • ในคอลัมน์ 'วันของเดือน' ระวังอย่าตั้งวันที่ที่ไม่เกิดขึ้นในเดือนที่ระบุในคอลัมน์ 'เดือน' (เช่น วันที่ 30 กุมภาพันธ์)
  • ทั้งคอลัมน์ 'เดือน' และ 'วันในสัปดาห์' ยอมรับชื่อย่อสำหรับเดือนและวันตามลำดับ และไม่ต้องคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
  • ในคอลัมน์ 'วันในสัปดาห์' ทั้ง 0 และ 7 หมายถึงวันอาทิตย์ คอลัมน์ 'ชั่วโมง' ต้องใช้รูปแบบ 'เวลาทหาร' (24 ชั่วโมง) แต่คุณไม่สามารถใช้ตัวเลข 24 ได้ -- แทน 0 หมายถึง 00.00 น. เนื่องจากค่าของนาที ชั่วโมง และวันของสัปดาห์เริ่มต้น ที่ 0 แทนที่จะเป็น 1
  • ไม่รองรับวินาที ดังนั้นคุณจึงไม่สามารถกำหนดเวลางานเป็นวินาทีที่ต้องการได้

สิ่งที่คุณสามารถทำได้คือจัดกำหนดการช่วงเวลาที่รวมโดยใช้ยัติภังค์ (14-22 ภายใต้ 'ชั่วโมง' จะทำงานอย่างต่อเนื่องตั้งแต่ 14.00 น. ถึง 22.00 น.) หรือเรียกใช้งานเดียวหลายครั้งโดยกำหนดรายการที่คั่นด้วยเครื่องหมายจุลภาค (1, 3,5 ภายใต้ 'วันในสัปดาห์' จะทำงานในวันจันทร์ วันพุธ และวันศุกร์)

ในขณะเดียวกัน ค่าขั้นตอนจะแสดงด้วยเครื่องหมายทับ (/) และค่าเหล่านี้ระบุจำนวนการข้ามภายในช่วง ตัวอย่างเช่น 3-20/3 ภายใต้ 'ชั่วโมง' จะทำงานทุก ๆ สามชั่วโมงตั้งแต่ 03:00 น. ถึง 20:00 น. สิ่งนี้มีประโยชน์เมื่อคุณต้องการทำงานซ้ำทุกๆ X ชั่วโมง เนื่องจากคุณสามารถรวมดอกจันและขั้นตอน (*/X) คุณสามารถรวมช่วงกับรายการและขั้นตอนกับช่วงได้ตราบเท่าที่คุณใช้ตัวเลข กล่าวคือ ไม่อนุญาตให้ใช้ชุดค่าผสม เช่น 'จัน-มาร์' หรือ 'อังคาร ศุกร์-อาทิตย์'

หรือแทนที่จะตั้งค่าสำหรับทุกคอลัมน์ คุณสามารถเขียน @weekly, @yearly, @monthly, @daily หรือ @hourly ที่จุดเริ่มต้นของแถว แล้วตามด้วยคำสั่ง ตามกำหนดการเช่นนี้ งานจะทำงานในอินสแตนซ์แรกที่เป็นไปได้ ดังนั้น @weekly จะทำงานตอนเที่ยงคืนของวันแรกของสัปดาห์ หากคุณต้องการรันงานทันทีที่ระบบ (re) เริ่มทำงานใหม่ ให้ใช้คำสั่ง @reboot

ในตัวอย่างนี้ เราได้กำหนดเวลาสำรองข้อมูลทุกวันเวลา 08:20 และ 20:20 น. วอลเปเปอร์จะเปลี่ยนโดยอัตโนมัติทุก ๆ สามวันเวลา 19:00 น. และสคริปต์จะตรวจสอบพอดคาสต์ใหม่ทุกวันจันทร์เวลา 10:20 และ 20:20 น. การแจ้งเตือนวันเกิดถูกตั้งค่าไว้สำหรับวันที่ 25 มีนาคม และจะทำงานทุกๆ 30 นาทีภายในกรอบเวลาที่กำหนด สุดท้าย สคริปต์จะตรวจสอบอีเมลทุกๆ 15 นาที ตั้งแต่ 8 ถึง 20 นาที แต่เฉพาะในวันทำงานเท่านั้น คุณมีอิสระในการจัดระเบียบ crontab ของคุณด้วยช่องว่างและแท็บระหว่างคอลัมน์ แต่ไม่ใช่ภายใน (อย่าใส่ช่องว่างระหว่างเครื่องหมายจุลภาค ยัติภังค์ และเครื่องหมายทับ)

หากทั้งหมดนี้ฟังดูซับซ้อนเกินไป ไม่ต้องกังวล คุณสามารถพึ่งพาอินเทอร์เน็ตได้ตลอดเวลา เครื่องมือเช่น เครื่องกำเนิด Crontab , Crontab.guru และ Corntab ช่วยคุณสร้างงาน cron โดยไม่ต้องรู้ไวยากรณ์ crontab ใดๆ โดยจะแสดงให้คุณเห็นว่างานจะดำเนินการต่อไปเมื่อใด และจัดเตรียมเทมเพลตสำหรับนิพจน์ที่ใช้กันทั่วไป Crontab.guru เป็นกลุ่มที่ดีที่สุดเพราะมันให้คุณทดสอบไวยากรณ์ crontab แบบสดได้ คุณจึงเห็นได้ทันทีว่าการเปลี่ยนแปลงของคุณจะส่งผลต่อกำหนดการอย่างไร

วิธีตรวจสอบว่ามีการดำเนินการงาน Cron หรือไม่

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

Cron มีคุณลักษณะการแจ้งเตือนทางอีเมลในตัว แต่ต้องมีการตั้งค่าเซิร์ฟเวอร์อีเมลในเครื่องอย่างง่ายเป็นอย่างน้อย มีผู้ใช้ตามบ้านจำนวนไม่มากที่ยินดีกำหนดค่านี้ และมีการแจกแจงจำนวนไม่มากตามค่าเริ่มต้น (เช่น Ubuntu ไม่มี) วิธีที่เร็วที่สุดในการตรวจสอบ cron คือการสแกนบันทึกของระบบด้วยคำสั่งนี้:

cat /var/log/syslog | grep -i cron

ตัวเลือก -i ทำให้การสืบค้นของเราไม่คำนึงถึงขนาดตัวพิมพ์ เป็นไปได้ว่า cron จะมีไฟล์บันทึกของตัวเองอยู่ที่ใดที่หนึ่งใน

/var/log/

ให้ดูที่นั่นหากคำสั่งนี้ล้มเหลวในการสร้างผลลัพธ์ที่เป็นประโยชน์

หากคุณต้องการบันทึกเอาต์พุตของงาน cron เฉพาะ คุณสามารถเปลี่ยนเส้นทางไปยังไฟล์ได้ ระบุพาธและชื่อไฟล์ในคอลัมน์สุดท้ายของ crontab หลังคำสั่งที่คุณต้องการรัน:

30 * * * * /usr/bin/yourcommand > /home/username/logfile.txt

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

เกิดอะไรขึ้นถ้า Cron ไม่ทำงาน?

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

บริการ cron ทำงานอยู่หรือไม่

ดังที่คุณทราบ cron daemon ควรทำงานในเบื้องหลัง ตรวจสอบให้แน่ใจว่าเป็นกรณีนี้จริงๆ บริการนี้เรียกว่า cron หรือ cron

สำหรับการแจกแจงโดยใช้ systemd:

systemctl status cron

สำหรับการแจกแจงโดยใช้พุ่งพรวด:

service cron status

หากการแจกจ่ายของคุณใช้วิธีการเริ่มต้น System V แบบ 'เก่า' ให้แสดงรายการบริการทั้งหมดด้วย:

วิธีทำข้อความโค้งใน illustrator
initctl list

และดูว่า cron อยู่ในรายการหรือไม่

คุณได้รับอนุญาตให้มีไฟล์ crontab หรือไม่?

ตรวจสอบ .. ของคุณ

/etc

โฟลเดอร์สำหรับไฟล์ชื่อ

cron.allow

และ

cron.deny

. บน Ubuntu ไม่ควรมีอยู่ ซึ่งหมายความว่าผู้ใช้ทั้งหมดได้รับอนุญาตให้จัดการงาน cron อย่างไรก็ตาม หากมี

วิธีถอนการติดตั้งและติดตั้งไดรเวอร์ gpu ใหม่
cron.allow

ไฟล์จะต้องมีชื่อผู้ใช้ของคุณ ในทางกลับกัน ถ้า

cron.deny

มีไฟล์อยู่ ชื่อผู้ใช้ของคุณไม่ควรอยู่ในนั้น ออกจาก

cron.deny

ไฟล์ว่างหมายความว่าเฉพาะรูทและผู้ใช้ที่ระบุไว้ใน

cron.allow

สามารถมีไฟล์ crontab

ตัวแปรของคุณถูกตั้งค่าอย่างถูกต้องหรือไม่?

Crontab ตั้งค่าตัวแปร SHELL ของคุณเป็น .โดยอัตโนมัติ

/bin/sh

. อย่างไรก็ตาม ถ้า เปลือกที่คุณเลือกคือปลา หรือ bash คุณควรเปลี่ยนตัวแปร SHELL

. ในทำนองเดียวกัน ตัวแปร PATH จะมีไดเร็กทอรีเพียงไม่กี่ตัวตามค่าเริ่มต้น นี่คือที่ที่ crontab ค้นหาคำสั่ง Linux หากงาน cron ของคุณไม่สามารถรันได้ อาจเป็นเพราะ crontab ไม่ 'เห็น' คำสั่งที่คุณใช้ เพื่อหลีกเลี่ยงปัญหานี้ ให้เพิ่มไดเร็กทอรีที่มีคำสั่งไปยังตัวแปร PATH โดยคั่นด้วยโคลอน:

เส้นทาง=/opt/myapp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

หากคุณไม่ต้องการแก้ไขสิ่งนี้ใน crontab ของคุณ คุณสามารถกำหนดตัวแปรเหล่านี้ในสคริปต์ที่คุณต้องการเรียกใช้เป็นงาน cron

การจัดรูปแบบ crontab ของคุณตรงประเด็นหรือไม่?

ไวยากรณ์ของ Crontab นั้นไม่ได้ราบรื่นนัก แม้ว่าคุณจะตรวจสอบด้วยเครื่องมือออนไลน์ที่กล่าวถึงก่อนหน้านี้ ข้อผิดพลาดเล็กน้อยยังสามารถป้องกันไม่ให้ cron ดำเนินงานของคุณได้ ระวัง:

  • เพิ่มบรรทัดว่างที่ส่วนท้ายของไฟล์ crontab
  • หลีกเลี่ยงเครื่องหมาย % ด้วยแบ็กสแลชหากคำสั่งของคุณรวมไว้
  • เขียนความคิดเห็นแยกบรรทัดที่ขึ้นต้นด้วย # อย่าเขียนความคิดเห็นในบรรทัดเดียวกับตัวแปรสภาพแวดล้อมหรือถัดจากคำสั่งงาน cron

คุณต้องใช้เทอร์มินัลจริงหรือ

ไม่ได้อย่างแน่นอน. ผู้ใช้ KDE สามารถกำหนดเวลางาน cron ด้วย KCron ซึ่งสามารถเข้าถึงได้จาก การตั้งค่าระบบ > ตัวกำหนดเวลางาน โมดูล. ด้วยอินเทอร์เฟซตรงไปตรงมาที่ให้คุณเลือกและปรับแต่งทุกอย่างได้ด้วยการคลิกเมาส์เพียงไม่กี่ครั้ง KCron ยินดีที่จะใช้

ถ้าคุณชอบ GNOME มากกว่า กำหนดการ GNOME สำหรับคุณ. วิธีการนี้คล้ายคลึงกันแม้ว่าอินเทอร์เฟซจะแตกต่างกันเล็กน้อย มันมีโหมดขั้นสูงสำหรับการปรับเปลี่ยนแบบละเอียด และมาพร้อมกับแอพเพล็ตพาเนลซึ่งคุณสามารถจัดการงานได้โดยตรง

คุณควรระวังวิธีแก้ปัญหาอื่นๆ เช่น Crontab-UI และ มินิครอน . เหมาะสำหรับผู้ใช้ที่จัดการหลายเครื่องและงาน cron และหนึ่งในคุณสมบัติที่ยอดเยี่ยมที่สุดคืออินเทอร์เฟซบนเว็บ

มีทางเลือกอื่นของ Cron หรือไม่?

แม้ว่า cron จะเป็นตัวกำหนดตารางเวลางานมาตรฐานสำหรับ Linux แต่ก็ไม่ใช่ตัวเดียวอย่างแน่นอน NS ที่คำสั่ง เหมาะอย่างยิ่งสำหรับงานด่วนแบบครั้งเดียวที่สามารถกำหนดเวลาได้จากบรรทัดคำสั่ง โดยไม่ต้องมีไฟล์การกำหนดค่าพิเศษ หากต้องการมากกว่านี้ มี GNUbatch ซึ่งแนะนำแนวคิดเรื่องการพึ่งพา ด้วย GNUbatch คุณสามารถกำหนดเงื่อนไขเฉพาะสำหรับงานทุกงาน หรือทำให้งานตามกำหนดการขึ้นอยู่กับงานก่อนหน้า สิ่งที่คล้ายกันสามารถทำได้ด้วย ตัวจับเวลาระบบ . แม้ว่าการกำหนดค่าจะมีประโยชน์น้อยกว่า cron แต่ตัวจับเวลา systemd สามารถจดจำได้ว่างานใดพลาดกำหนดการในขณะที่คอมพิวเตอร์ปิดอยู่ และเรียกใช้ในครั้งต่อไปที่เปิดใช้งาน

นี่คือสิ่งที่ cron ไม่สามารถทำได้คนเดียว ด้วยเหตุนี้ จึงเหมาะสำหรับเซิร์ฟเวอร์และคอมพิวเตอร์ที่ทำงานตลอดเวลา แต่จะไม่ทำงานตามกำหนดเวลาขณะที่คอมพิวเตอร์ปิดอยู่ นี่คือที่ อนาครอน เข้ามาเล่น ในทางเทคนิคแล้วไม่ใช่ 'ทางเลือก' หรือการแทนที่ cron แทน, anacron เสริม cron และควรใช้ควบคู่ไปกับมัน, ซึ่งเป็นกรณีของลีนุกซ์หลายรุ่น, รวมถึงผลิตภัณฑ์ที่ใช้ Ubuntu และ Ubuntu. Anacron บันทึกเมื่องานถูกดำเนินการครั้งสุดท้าย และตรวจสอบว่ามีอินสแตนซ์ที่ไม่ได้รับในขณะที่ระบบปิดอยู่หรือไม่ มันจะเรียกใช้เมื่อคุณเปิดคอมพิวเตอร์อีกครั้ง แต่ทุกงานสามารถดำเนินการได้เพียงวันละครั้ง

cron บางเวอร์ชัน เช่น fcron มีคุณลักษณะของ anacron เป็นค่าเริ่มต้น ผู้ใช้ขั้นสูงอาจต้องการดู Hcron หรือ SuperCron ซึ่งนำการปรับปรุงหลายอย่างมาสู่ฟังก์ชัน cron พื้นฐาน แต่ก็ค่อนข้างท้าทายในการจัดการ

แล้วคุณล่ะ? คุณจัดระเบียบงานดิจิทัลของคุณอย่างไร คุณกำหนดเวลางานใดบน Linux แบ่งปันเรื่องราวและเคล็ดลับในการใช้ cron ในความคิดเห็น

เครดิตรูปภาพ: กระดานกำหนดการ โดย Gonzalo Aragon ผ่าน Shutterstock

แบ่งปัน แบ่งปัน ทวีต อีเมล 12 ไซต์วิดีโอที่ดีกว่า YouTube

ต่อไปนี้คือไซต์วิดีโอทางเลือกสำหรับ YouTube พวกเขาแต่ละคนมีโพรงที่แตกต่างกัน แต่ควรเพิ่มที่คั่นหน้าของคุณ

อ่านต่อไป
หัวข้อที่เกี่ยวข้อง
  • ลินุกซ์
  • ลินุกซ์
เกี่ยวกับผู้เขียน Ivana Isadora Devcic(เผยแพร่บทความ 24 รายการ)

Ivana Isadora เป็นนักเขียนและนักแปลอิสระ คนรัก Linux และแฟนเกิร์ลของ KDE เธอสนับสนุนและส่งเสริมซอฟต์แวร์โอเพ่นซอร์สและฟรี และเธอก็มองหาแอปที่ใหม่และสร้างสรรค์อยู่เสมอ ดูวิธีการติดต่อ ที่นี่ .

เพิ่มเติมจาก Ivana Isadora Devcic

สมัครรับจดหมายข่าวของเรา

เข้าร่วมจดหมายข่าวของเราสำหรับเคล็ดลับทางเทคนิค บทวิจารณ์ eBook ฟรี และดีลพิเศษ!

คลิกที่นี่เพื่อสมัครสมาชิก