基於upstart機制系統會話的理解

2021-07-02 01:59:26 字數 2207 閱讀 5820

upstart 還可以用於管理使用者會話的初始化。在我寫這篇文章的今天,多數 linux 發行版還沒有使用 upstart 管理會話。只有在 ubuntu raring 版本中,使用 upstart 管理使用者會話的初始化過程。

首先讓我們了解一下 session 的概念。session 就是乙個使用者會話,即使用者從遠端或者本地登入系統開始工作,直到使用者退出。這整個過程就構成乙個會話。

每個使用者的使用習慣和使用方法都不相同,因此使用者往往需要為自己的會話做乙個定製,比如新增特定的命令別名,啟動特殊的應用程式或者服務,等等。這些工作都屬於對特定會話的初始化操作,因此可以被稱為 session init。

使用者使用 linux 可以有兩種模式:字元模式和圖形介面。在字元模式下,會話初始化相對簡單。使用者登入後只能啟動乙個 shell,通過 shell 命令使用系統。各種 shell 程式都支援乙個自動執行的啟動指令碼,比如~/.bashrc。使用者在這些指令碼中加入需要執行的定製化命令。字元會話需求簡單,因此這種現有的機制工作的很好。

在圖形介面下,事情就變得複雜一些。使用者登入後看到的並不是乙個 shell 提示符,而是乙個桌面。乙個完整的桌面環境由很多元件組成。

以 ubuntu 為例,當使用者登入 ubuntu 圖形介面後,顯示管理器(display manager)lightdm 啟動 xsession。xsession 接著啟動 gnome-session,gnome-session 負責其它的初始化工作,然後就開始了乙個 desktop session。

圖 2.傳統 desktop session 啟動過程

init

|- lightdm

| |- xorg

| |- lightdm ---session-child

| |- gnome-session --session=ubuntu

| |- compiz

| |- gwibber

| |- nautilus

| :

| :

| |- dbus-daemon --session

| ::

這個過程有一些缺點(和 sysvinit 類似)。一些應用和元件其實並不需要在會話初始化過程中啟動,更好的選擇是在需要它們的時候才啟動。比如 update-notifier 服務,該服務不停地監測幾個檔案系統路徑,一旦這些路徑上發現可以更新的軟體包,就提醒使用者。這些檔案系統路徑包括新插入的 *** 盤等。update-notifier 由 gnome-session 啟動並一直執行著,在多數情況下,使用者並不會插入新的 ***,此時 update-notifier 服務一直在後台執行並消耗系統資源。更好的模式是當使用者插入 *** 的時候再執行 update-notifier。這樣可以加快啟動時間,減小系統執行過程中的記憶體等系統資源的開銷。對於移動,嵌入式等裝置等這還意味著省電。除了 update-notifier 服務之外,還有其它一些類似的服務。比如 network manager,一天之內使用者很少切換網路裝置,所以大部分時間 network manager 服務僅僅是在浪費系統資源;再比如 backup manager 等其它常駐記憶體,後台不間斷執行卻很少真正被使用的服務。

用 upstart 的基於事件的按需啟動的模式就可以很好地解決這些問題,比如使用者插入網線的時候才啟動 network manager,因為使用者插入網線表明需要使用網路,這可以被稱為按需啟動。

下圖描述了採用 upstart 之後的會話初始化過程。

圖 3.採用 upstart 的 desktop session init 過程

init

|- lightdm

| |- xorg

| |- lightdm ---session-child

| |- session-init # <-- upstart running as normal user

| |- dbus-daemon --session

| |- gnome-session --session=ubuntu

| |- compiz

| |- gwibber

| |- nautilus

| :

| :

: :

使用者Session 會話機制

總結 在展開話題之前,先看看乙個普通的分布式站點是咋樣的?1 發生位置 使用者側 例如 瀏覽器 2 實現方式 將使用者資訊 會話資訊 儲存在cookie中,在每次請求時,將這些資訊傳送到server進行解析 一般來說,cookie儲存的會話內容都會進行加密 例如 md5 sha等 這種方式主要依賴於...

實現會話跟蹤的機制

解析 實現會話跟蹤的機制 cookies,url重寫,隱藏式表單域,session機制 cookies cookies是使用最廣泛的會話跟蹤機制,cookies是有伺服器建立,並把cookies資訊儲存在使用者機器上的硬碟上,下次使用者再次訪問該站點服 務器的時候,儲存在使用者機器上硬碟的cooki...

haproxy 基於 cookie 的會話保持

請求會 給配置了相同cookie的server 會 給weight 0的後端 預設不會 給down狀態或disabled的server 如果設定了option persist或者force persist,則會強制 給down狀態或者disabled的server 同時如果配置了option red...