對于需要在固定時間執行的任務,我們通常會選擇使用定時任務。而對于使用 PHP 開發的應用,在 Linux 上使用定時任務來執行 PHP 腳本也是非常常見的方法。下面就讓我們一起來了解一下 Linux 定時任務 PHP 的相關內容。
Linux 上的定時任務常用的工具有 cron 和 systemd-timer,而 cron 是最為常用的定時任務管理工具之一。Cron 的任務格式為:
* * * * * command to be executed
- - - - -
| | | | |
| | | | +----- day of the week (0 - 6) (Sunday=0)
| | | +------- month (1 - 12)
| | +--------- day of the month (1 - 31)
| +----------- hour (0 - 23)
+------------- min (0 - 59)
例如,我們想要在每天的凌晨 1 點執行一個 PHP 腳本,那么我們就可以創建一個 crontab 并設置任務:
0 1 * * * /usr/bin/php /path/to/script.php
其中,第一列表示分鐘數,第二列表示小時數,依次類推。上面的命令就表示在每天的凌晨 1 點執行 /path/to/script.php 文件。我們需要注意的是,在執行 PHP 腳本時,應該使用絕對路徑來避免出現找不到文件的情況。
除了 cron,我們也可以使用 systemd-timer 來管理定時任務。systemd-timer 對當前系統的資源占用更加有效,可以并行運行多個任務。與 cron 不同,systemd-timer 可以使用配置文件來管理任務,而不是直接修改 crontab 文件。
在 systemd-timer 中,我們可以使用若干個不同的定時器單元(timer unit)來指定我們要執行的操作,并定義一個單元文件(service unit)來描述需要執行的任務。在單元文件中,我們需要定義我們希望 systemd 執行的一系列命令來完成我們的任務。在這個例子中,我們假定 /path/to/service 文件是一個 PHP 腳本,需要在每天的凌晨 1 點執行:
[Unit]
Description=Run script every day at 1:00
[Timer]
# OnCalendar is the crontab syntax, see systemd.time(7) for more details
OnCalendar=*-*-* 1:00:00
# Precise time for systemd
AccuracySec=1us
[Install]
WantedBy=multi-user.target
在上面的單元文件中,我們定義了一個每天凌晨 1 點執行一次的定時器。我們幾乎可以把 cron tab 文件的每一列完全照搬到這個定時器的配置文件當中。該定時器的單元名稱為 timer,而在這個單元的 [Unit] 小節中的 Description 屬性就是如何說明這個文件的。OnCalendar 屬性包含了我們的任務運行日期和時間,AccuracySec 屬性確定了使用精確計時器計時。在 [Install] 小節中,我們指定將該單元添加到 multi-user.target 目標中以啟動服務。
以上就是 Linux 定時任務 PHP 的相關知識,我們可以根據自己的需求來選擇使用 cron 還是 systemd-timer 這些定時任務管理工具來執行 PHP 腳本。通過定時任務的使用,我們可以快速方便地實現一些自動化腳本,提高工作效率,減少人工操作的時間和出錯的幾率。