對(duì)于需要在固定時(shí)間執(zhí)行的任務(wù),我們通常會(huì)選擇使用定時(shí)任務(wù)。而對(duì)于使用 PHP 開(kāi)發(fā)的應(yīng)用,在 Linux 上使用定時(shí)任務(wù)來(lái)執(zhí)行 PHP 腳本也是非常常見(jiàn)的方法。下面就讓我們一起來(lái)了解一下 Linux 定時(shí)任務(wù) PHP 的相關(guān)內(nèi)容。
Linux 上的定時(shí)任務(wù)常用的工具有 cron 和 systemd-timer,而 cron 是最為常用的定時(shí)任務(wù)管理工具之一。Cron 的任務(wù)格式為:
* * * * * 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 點(diǎn)執(zhí)行一個(gè) PHP 腳本,那么我們就可以創(chuàng)建一個(gè) crontab 并設(shè)置任務(wù):
0 1 * * * /usr/bin/php /path/to/script.php
其中,第一列表示分鐘數(shù),第二列表示小時(shí)數(shù),依次類推。上面的命令就表示在每天的凌晨 1 點(diǎn)執(zhí)行 /path/to/script.php 文件。我們需要注意的是,在執(zhí)行 PHP 腳本時(shí),應(yīng)該使用絕對(duì)路徑來(lái)避免出現(xiàn)找不到文件的情況。
除了 cron,我們也可以使用 systemd-timer 來(lái)管理定時(shí)任務(wù)。systemd-timer 對(duì)當(dāng)前系統(tǒng)的資源占用更加有效,可以并行運(yùn)行多個(gè)任務(wù)。與 cron 不同,systemd-timer 可以使用配置文件來(lái)管理任務(wù),而不是直接修改 crontab 文件。
在 systemd-timer 中,我們可以使用若干個(gè)不同的定時(shí)器單元(timer unit)來(lái)指定我們要執(zhí)行的操作,并定義一個(gè)單元文件(service unit)來(lái)描述需要執(zhí)行的任務(wù)。在單元文件中,我們需要定義我們希望 systemd 執(zhí)行的一系列命令來(lái)完成我們的任務(wù)。在這個(gè)例子中,我們假定 /path/to/service 文件是一個(gè) PHP 腳本,需要在每天的凌晨 1 點(diǎn)執(zhí)行:
[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
在上面的單元文件中,我們定義了一個(gè)每天凌晨 1 點(diǎn)執(zhí)行一次的定時(shí)器。我們幾乎可以把 cron tab 文件的每一列完全照搬到這個(gè)定時(shí)器的配置文件當(dāng)中。該定時(shí)器的單元名稱為 timer,而在這個(gè)單元的 [Unit] 小節(jié)中的 Description 屬性就是如何說(shuō)明這個(gè)文件的。OnCalendar 屬性包含了我們的任務(wù)運(yùn)行日期和時(shí)間,AccuracySec 屬性確定了使用精確計(jì)時(shí)器計(jì)時(shí)。在 [Install] 小節(jié)中,我們指定將該單元添加到 multi-user.target 目標(biāo)中以啟動(dòng)服務(wù)。
以上就是 Linux 定時(shí)任務(wù) PHP 的相關(guān)知識(shí),我們可以根據(jù)自己的需求來(lái)選擇使用 cron 還是 systemd-timer 這些定時(shí)任務(wù)管理工具來(lái)執(zhí)行 PHP 腳本。通過(guò)定時(shí)任務(wù)的使用,我們可以快速方便地實(shí)現(xiàn)一些自動(dòng)化腳本,提高工作效率,減少人工操作的時(shí)間和出錯(cuò)的幾率。