使用 Software Collections 中較新的 PHP 版本執行 Drupal 的 drush cron 作業
drush
當您的伺服器從 Software Collections 安裝了較新的 PHP 版本時,您如何執行 Drupal 的cron 作業?伺服器執行的是 Scientific Linux 7,它帶有 PHP 5.4,但我們需要並且已經使用 Software Collections
rh-php71
包安裝了 PHP 7.1。Apache 和 Drupal 在 PHP 7.1 上執行良好,但我們還需要將 drush cron 作業添加到我們的 crontab 中,並確保 drush 在這樣做時使用的是較新版本的 PHP。我們已經測試過 drush(我們安裝了 drush 8.1.10)是否會在預設的 PHP 5.4 下執行,以防萬一,但 cron 作業會因錯誤而崩潰,這是可以理解的。我們嘗試通過以 root 身份執行以下命令來測試 cron 命令(以您通常嘗試在 scl 包裝器中執行命令的方式):
scl enable rh-php71 drush cron -r /data/webs/www/siteroot
但這不會執行,返回錯誤:
Unable to open /etc/scl/conf/drush!
進一步的測試(在終端中)表明,我們可以在 scl 包裝器中的子 shell 中成功執行 drush 命令:
scl enable rh-php71 bash drush cron -r /data/webs/www/siteroot exit
有什麼方法可以讓我們在 crontab 中像“單線”一樣執行必要的 drush 命令,還是我別無選擇,只能創建一個包含上述命令的單獨 shell 腳本,並將其稱為 cron代替作業命令?
(我也在Drupal.SE上問過這個問題,雖然這似乎更像是一個 Linux 問題而不是 Drupal 問題,但在 Unix.SE 上沒有任何回應。)
在閱讀了軟體集合指南的更多技術部分後,事實證明,當嘗試執行在包裝器中包含參數的命令
scl
時,您需要將命令用單引號引起來,或者用兩個減號將其與行的包裝器部分分開跡象:如果您正在執行具有多個參數的命令,請記住將命令及其參數括在引號中:
scl action software_collection_1 software_collection_2 'command --argument'
或者,使用 – 命令分隔符執行帶有多個參數的命令:
scl action software_collection_1 software_collection_2 -- command --argument
我的 drush 命令現在執行成功。