ฉันต้องเรียกใช้sudo php artisan backup:runและป้อนรหัสผ่านโดยอัตโนมัติทุกวัน 15.00 น. ฉันรู้วิธีการทำสิ่งนี้บน Windows เพียงแค่ใช้ตัวกำหนดเวลางานและตั้งค่าให้ทำงานเป็นผู้ดูแลระบบบนสคริปต์ .bat

answer

นี่ควรจะค่อนข้างเหมือนกันบน Ubuntu 14.04 เนื่องจากเป็นรุ่นล่าสุด - อย่างไรก็ตาม อาจมีความแตกต่างกันบ้าง

งานแบ่งออกเป็นสองส่วน:

  • เพื่อให้สามารถsudoโดยไม่ต้องใช้รหัสผ่านได้ ให้เพิ่มผู้ใช้ในsudoersไฟล์และอนุญาตให้ไม่ต้องใช้รหัสผ่าน
  • หากต้องการเรียกใช้งานโดยอัตโนมัติ ให้ใช้cron.

sudoers

เพิ่มผู้ใช้ในกลุ่ม sudo ด้วย

usermod -aG sudo <username>

เปลี่ยน<username>เป็นผู้ใช้ที่คุณต้องการเรียกใช้งานเป็น

เพื่อหลีกเลี่ยงไม่ให้ต้องป้อนรหัสผ่าน ให้แก้ไข/etc/sudoersไฟล์:

visudo

และเพิ่มบรรทัดต่อไปนี้ที่ท้ายไฟล์:

<username>  ALL=(ALL) NOPASSWD:ALL

อีกครั้ง เปลี่ยน<username>เป็นผู้ใช้ที่คุณต้องการเรียกใช้งานดังกล่าว

โปรดทราบว่าแนวทางที่ดีกว่าคือการสร้างไฟล์ sudoers ใหม่สำหรับผู้ใช้เฉพาะของคุณแทนการแก้ไขไฟล์ sudoers หลัก เช่น:

echo "<username>  ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/username

สำหรับข้อมูลเพิ่มเติมโปรดดูที่วิธีการเพิ่มผู้ใช้ sudoers ในอูบุนตู

ดูคำถามนี้ด้วยฉันจะเพิ่มผู้ใช้เป็น sudoer ใหม่โดยใช้บรรทัดคำสั่งได้อย่างไร

cron

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

ในการแก้ไข crontab ให้ใช้

crontab -e

หรือสำหรับผู้ใช้อื่น ให้ใช้

crontab -u ostechnix -e

หากคุณไม่เคยเรียกใช้ crontab มาก่อน ระบบอาจขอให้คุณเลือกตัวแก้ไขในครั้งแรกที่คุณเรียกใช้

แล้วงานบ่าย 3 แอดไลน์

0 15 * * * <command-to-execute>

ดังนั้นในกรณีของคุณให้ใช้

0 15 * * * sudo php artisan backup:run

บันทึกและออกจากโปรแกรมแก้ไข จากนั้นเพื่อตรวจสอบ crontab ให้ใช้

crontab -l

หากคุณต้องการเปลี่ยนเวลาฟิลด์จะเป็นดังนี้จากหน้าคน cron

       The time and date fields are:

              field          allowed values
              -----          --------------
              minute         0-59
              hour           0-23
              day of month   1-31
              month          1-12 (or names, see below)
              day of week    0-7 (0 or 7 is Sunday, or use names)

       A field may contain an asterisk (*), which always stands for
       "first-last".

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการcrontabดูคู่มือเริ่มต้น Cron งานman cronหรือประเภท

ดูคำถามนี้ด้วยฉันจะตั้งค่างาน Cron ได้อย่างไร