2017-11-11 277 views
0

我在RHEL系統上運行Redis服務器,該服務器需要進程每24小時更新其AFS身份驗證令牌。在Redis服務器進程中運行shell命令

在客戶端代碼,職位數據到數據庫中,我可以通過調用每N POST請求一個shell命令更新AFS令牌(如echo PASSWORD | kinit && aklog

我想實現在服務器類似的東西過程,但我不知道如何去做。是否有任何可用於在Redis服務器進程中運行shell命令的「post-receive-data」回調風格掛鉤?我非常感謝任何其他人可以提供的建議

回答

2

否--Redis服務器不是爲此目的設計的,並非專門用於此目的。如果您確實堅持使用來自Redis服務器的事件來觸發shell命令,你可以通過破解:

  • 尾隨服務器的日誌文件,並尋找一個客戶端調用生成EVAL與調用redis.log功能的Lua腳本的事件。
  • 運行一個基本的本地Redis的客戶一個循環(如redis-cli)從隊列BRPOP S,做的工作,並重復
  • 代碼的東西作爲一種後臺程序的使用Redis的PubSub的接收通過信道消息觸發shell命令
  • 等等...

注:WRT以「Redis的服務器沒有專爲」 - 如果你發現了一些漏洞,讓你做你在做什麼尋找,請將其報告爲嚴重的安全問題。從這個意義上說,你可能想要閱讀http://antirez.com/news/96

+0

謝謝@ItamarHaber,這很有趣,但我擔心我沒有清楚地解釋我的情況 - 我需要從服務器進程運行shell命令,而不是來自外部過程。我相信shell命令必須從運行服務器的進程(或該進程產生的進程)運行,以更新該進程的AFS令牌。 – duhaime

+0

好的,這樣就不可能修改Redis源代碼。 –