開機自動啟動程式在ubuntu14.04 [論壇 - 新手村]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊



開機自動啟動程式在ubuntu14.04
會員一級
註冊日期:
2017/5/24 9:24
所屬群組:
已註冊使用者
等級: 1
HP : 0 / 5
MP : 1 / 101
EXP: 21
離線
小弟是個ubuntu菜鳥
我在網路上看和論壇看的開機自動啟動程式,我發現我自己都有一點小問題。
首先
我寫了一個test.sh , 內容裡面是運行我的程式
#!/bin/bash
gnome-terminal -e "/home/username/test/dist/./hi"

以下動作都是在終端機執行,我使用了網路上和論壇上有人使用的方法。

1.我使用~/.bashrc
我在裡面輸入執行我的test.sh
~/test.sh
變成我只要開終端機都會啟動我的test.sh。
這對我來說是不對的
因為我想要的是開機自動啟動程式是只會啟動一次。我關掉後在開終端機是不會在啟動test.sh的功能。

2./etc/init.d/和update-rc.d
我把我的test.sh放入/etc/init.d 。
我先手動測試:sudo /etc/init.d/test.sh start 是可以執行程式的。
但我使用自動執行的功能,我輸入了update-rc.d -f test.sh start 90 1 2 3 4 5 6 S . stop 10 0 .
然後重開機或重登入或關機在啟動,所有方法都使用,但它都沒有執行自動啟動程式功能。

3./etc/rc.local
我在/etc/rc.local裡面輸入了gnome-terminal -e "/home/username/test/dist/./hi"

然後用再移動到/etc/rcS.d
我輸入sudo ln ../rc.local S90rc.local
然後我又重開機或重登入或關機在啟動
它也都沒有自動執行

所以我想請問各位高手,我該如何設定才可以開機自動執行程式,而且只要執行一次就可以了。

2017/5/24 9:51
應用擴展 工具箱
回覆: 開機自動啟動程式在ubuntu14.04
會員三級
註冊日期:
2016/4/18 12:29
所屬群組:
已註冊使用者
等級: 9
HP : 0 / 221
MP : 39 / 4821
EXP: 84
離線
沒研究過6@_@
/etc/rc0.d/ 這試過了嗎?

2017/5/24 11:02
應用擴展 工具箱
回覆: 開機自動啟動程式在ubuntu14.04
會員一級
註冊日期:
2017/5/24 9:24
所屬群組:
已註冊使用者
等級: 1
HP : 0 / 5
MP : 1 / 101
EXP: 21
離線
嗯~都試過了~

2017/5/24 13:50
應用擴展 工具箱
回覆: 開機自動啟動程式在ubuntu14.04
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 37
HP : 0 / 905
MP : 679 / 30304
EXP: 23
離線
BIGBanana 寫到:
小弟是個ubuntu菜鳥
我在網路上看和論壇看的開機自動啟動程式,我發現我自己都有一點小問題。
首先
我寫了一個test.sh , 內容裡面是運行我的程式
#!/bin/bash
gnome-terminal -e "/home/username/test/dist/./hi"

以下動作都是在終端機執行,我使用了網路上和論壇上有人使用的方法。

1.我使用~/.bashrc
我在裡面輸入執行我的test.sh
~/test.sh
變成我只要開終端機都會啟動我的test.sh。
這對我來說是不對的
因為我想要的是開機自動啟動程式是只會啟動一次。我關掉後在開終端機是不會在啟動test.sh的功能。

2./etc/init.d/和update-rc.d
我把我的test.sh放入/etc/init.d 。
我先手動測試:sudo /etc/init.d/test.sh start 是可以執行程式的。
但我使用自動執行的功能,我輸入了update-rc.d -f test.sh start 90 1 2 3 4 5 6 S . stop 10 0 .
然後重開機或重登入或關機在啟動,所有方法都使用,但它都沒有執行自動啟動程式功能。

3./etc/rc.local
我在/etc/rc.local裡面輸入了gnome-terminal -e "/home/username/test/dist/./hi"

然後用再移動到/etc/rcS.d
我輸入sudo ln ../rc.local S90rc.local
然後我又重開機或重登入或關機在啟動
它也都沒有自動執行

所以我想請問各位高手,我該如何設定才可以開機自動執行程式,而且只要執行一次就可以了。



從您提到的,瞭解您有看過一些參考文章了,

不過還是先提供兩個索引,裡面有紀錄一些討論案例和參考連結,供您參考。

* [索引]如何執行指令
* [索引] 開機流程

================================================================================

您的環境是「Ubuntu 14.04」。
我的環境是「Xubuntu 16.04 amd64 英文界面」,以下測試是使用這個環境。

另外「14.04」和「16.04」有一個差異要注意的,就是在「16.04」加入了「systemd」的機制。

================================================================================

關於


BIGBanana 寫到:
1.我使用~/.bashrc
我在裡面輸入執行我的test.sh
~/test.sh
變成我只要開終端機都會啟動我的test.sh。
這對我來說是不對的
因為我想要的是開機自動啟動程式是只會啟動一次。我關掉後在開終端機是不會在啟動test.sh的功能。



建議您可以先釐清「~/.bashrc會在什麼條件下被執行?

之前有一篇討論「回覆: alias 設定別名後,如何保存,不會每次退出終端機後就不見了,又要重新設定?」,裡面有一些連結,您可以參考。

在「Wikipedia / Unix_shell」裡面有一個表「Configuration files」,您也可以參考。

也可以執行「$ man bash」,
然後您用「profile」或「bashrc」當關鍵字查詢,可以找到一些相關的說明,

尤其在「INVOCATION」那部份的說明。

另外還有一個索引「bash-handbook」。

鳥哥的 Linux 私房菜,在這部份的討論,則是在「第十章、認識與學習BASH / 10.4.3 環境設定檔」。

另外還有一個要注意的,在「泛Ubuntu」的環境,預設的「~/.profile」會有下面這一段,
這會跟什麼條件下,會執行「~/.profile」和執行「~/.bashrc」有關。


...略...

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

...略...



您可以執行下面指令,觀看「~/.profile」的內容,「view」可以改成「vi」或「cat」或「less」或「more」...


$ view ~/.profile




================================================================================

關於「2」和「3」,可以參考「[索引] 開機流程

在下方,我有紀錄一些「## init」的討論案例。

您可以先瞭解的方向,

A.在進入桌面環境,有一個機制是「Desktop Application Autostart」,

可以參考這篇回覆「#8 回覆: 請問要怎麼設定開機時自動開啟指定檔案並具有root權限?」。


B.在進入桌面環境,有幾個機制,

建議可以先閱讀下面幾篇文章

* 浅析 Linux 初始化 init 系统,第 1 部分: sysvinit
* 浅析 Linux 初始化 init 系统,第 2 部分: UpStart
* 浅析 Linux 初始化 init 系统,第 3 部分: Systemd
* SystemdForUpstartUsers


================================================================================

## 簡單範例 - 關於「Desktop Application Autostart

前置動作

執行下面指令,安裝「libnotify-bin」這個「Package」


$ sudo apt-get install libnotify-bin



安裝完畢後,執行下面指令,觀看「libnotify-bin」這個「Package」有那些檔案安裝在系統上。


$ dpkg -L libnotify-bin | sort



顯示


/.
/usr
/usr/bin
/usr/bin/notify-send
/usr/share
/usr/share/doc
/usr/share/doc/libnotify-bin
/usr/share/doc/libnotify-bin/AUTHORS
/usr/share/doc/libnotify-bin/changelog.Debian.gz
/usr/share/doc/libnotify-bin/copyright
/usr/share/doc/libnotify-bin/NEWS.gz
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/notify-send.1.gz




執行下面指令,建立專案資料夾


$ mkdir -p ~/app/test




然後來到「Arch Wiki / Desktop notifications」這一頁,

找到「Libnotify / Bash」的範例「hello_world.sh」


#!/bin/bash
notify-send 'Hello world!' 'This is an example notification.' --icon=dialog-information




所以執行下面指令,產生範例程式


cat > ~/app/test/hello.sh << EOF
#!/usr/bin/env bash

notify-send '您好' '歡迎登入桌面' --icon=dialog-information

EOF



執行


$ ls ~/app/test/hello.sh -l



顯示


-rw-rw-r-- 1 user user 81 May 24 13:17 /home/user/app/test/hello.sh



執行下面指令,設定使用者可執行的權限


$ chmod u+x ~/app/test/hello.sh



執行


$ ls ~/app/test/hello.sh -l



顯示


-rwxrw-r-- 1 user user 81 May 24 13:17 /home/user/app/test/hello.sh




然後可以執行


$ ~/app/test/hello.sh



正常的狀況下就會出現一個對話框。


接下來要測「Desktop Application Autostart」的機制,

有兩個位置可以放置

* /etc/xdg/autostart
* ~/.config/autostart/

執行「$ ls /etc/xdg/autostart」應該可以看到一些副檔名是「desktop」的檔案,您可以複製參考來修改。

而這次測試則是放在「~/.config/autostart」這個資料夾底下

執行下面指令,產生「~/.config/autostart/hello.desktop」這個檔案


cat > ~/.config/autostart/hello.desktop << EOF
[Desktop Entry]
Type=Application
Name=Hello
Name[zh_TW]=哈囉
Comment=Demo Desktop Application Autostart
Comment[zh_TW]=自動執行範例
Exec=/home/sam/app/test/hello.sh
Icon=video
Terminal=false

EOF



然後登出桌面,再登入桌面,一樣會看到剛剛提到的對話框。

================================================================================

註:

關於「Desktop Application Autostart」放置的路徑,也可以透過執行下面的指令曉得


$ kde4-config --path xdgconf-autostart



顯示


/home/user/.config/autostart/:/etc/xdg/xdg-xubuntu/autostart/:/usr/share/upstart/xdg/autostart/:/etc/xdg/autostart/




關於「kde4-config」這個指令,是屬於「kdelibs-bin」這個套件。

可以執行下面指令,找到更多的「type」


$ kde4-config --types



例如執行


$ kde4-config --types | grep autostart



顯示


xdgconf-autostart - XDG autostart directory



================================================================================

* /etc/init.d
* /etc/init

在「/etc/init.d」這個資料夾底下,有兩個檔案「README」和「skeleton」可以參考。

* /etc/init.d/README
* /etc/init.d/skeleton

或是也可以參考一些既有的實作

例如

* /etc/init.d/console-setup
* /etc/init.d/apport


然後之前有一些討論

* #3 回覆: 在啟動或關機時執行script (rc.d)執行
* #4 回覆: VNC 如何開機自動運行


* Debian Wiki / LSBInitScripts
* Debian/Ubuntu 新增開機自動執行程式
* Ubuntu Community Help Wiki / UpstartHowto
* Ubuntu Community Help Wiki / UbuntuBootupHowto


$ man service
$ man update-rc.d
$ man insserv

關於這部份的範例,還沒實際去撰寫和完整的測試,所以就沒提供我自行撰寫的範例,請先參考上面提到的連結。

================================================================================

以上提供參考

報告完畢


2017/5/24 17:13
應用擴展 工具箱
回覆: 開機自動啟動程式在ubuntu14.04
會員一級
註冊日期:
2017/5/24 9:24
所屬群組:
已註冊使用者
等級: 1
HP : 0 / 5
MP : 1 / 101
EXP: 21
離線
謝謝你的建議~不過我測試你上面所說的~還是一樣狀況@@a登出或重開機或關機在啟動,沒有任何反應。ORZ.....

2017/5/25 9:34
應用擴展 工具箱
回覆: 開機自動啟動程式在ubuntu14.04
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 37
HP : 0 / 905
MP : 679 / 30304
EXP: 23
離線
BIGBanana 寫到:
謝謝你的建議~不過我測試你上面所說的~還是一樣狀況@@a登出或重開機或關機在啟動,沒有任何反應。ORZ.....


BIGBanana 寫到:
小弟是個ubuntu菜鳥
我在網路上看和論壇看的開機自動啟動程式,我發現我自己都有一點小問題。
首先
我寫了一個test.sh , 內容裡面是運行我的程式
#!/bin/bash
gnome-terminal -e "/home/username/test/dist/./hi"

...略...



先釐清一下,您使用「gnome-terminal -e」的考量是?

是要看顯示的訊息嗎?

另外您若使用「gnome-terminal -e "/home/username/test/dist/hi"」

因為「gnome-terminal」需要有圖形界面環境才能執行,

而您使用「init script」的方式,是在「進入桌面環境」執行的,這樣「gnome-terminal -e」應該無法正常執行。


您可以嘗試改成下面的方式來執行,再測看看 (以下我沒去測過)


#!/bin/sh
/home/username/test/dist/hi > /tmp/hi.log






#!/bin/sh
/home/username/test/dist/hi >> /tmp/hi.log




您也可以「/home/username/test/dist/hi」這個程式裡面,加入「寫log(寫檔)」的機制,然後執行


#!/bin/sh
/home/username/test/dist/hi



然後觀看log,確認您的程式是否有執行

若是您的程式是daemon,則是可以觀看該process是否存在


$ ps aux | grep hi




以上釐清


2017/5/25 13:18
應用擴展 工具箱
回覆: 開機自動啟動程式在ubuntu14.04
會員一級
註冊日期:
2017/5/24 9:24
所屬群組:
已註冊使用者
等級: 1
HP : 0 / 5
MP : 1 / 101
EXP: 21
離線
謝謝,我試看看!!~

2017/5/25 15:01
應用擴展 工具箱


 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.