這個構想是因為小孩使用網路常常一用就忘了關機,所以我才想到用shell的 script 來控制每次每天只能用一小時網路.如果一小時後再開機網路會關閉,要到第2天才能使用. (我使用的環境是OSX10.4.11)

先在 家目錄建立1個目錄 check_net , 然後在這目錄下建立3個檔案: check , at_script , date_stamp
並讓 check , at_script 有執行的權限
chmod 744 check
chmod 744 at_script

如下:
限定小孩使用網路時間

check的 script程式內容:
限定小孩使用網路時間
#!/bin/bash
Home_dir=/Users/jkchang #定義家目錄
Dstamp_file=$Home_dir/check_net/date_stamp #定義時間記錄檔
today=`date +%m%d"20"%y` #取得目前日期時間放入變數 today,格式為mmdd20yy
result="`grep -m 1 $today $Dstamp_file| cut -d ' ' -f 1`"
#比對目前日期和 data_stamp 內是否有相同的
#例如12月15日 $today=12152008 當date_stamp中有12152008出現一次就會將12152008放入$result 變數
if [ -z $result ]; then #如果比對的結果$result 字串長度為0 ,表示沒有比對到並且是第一次使用
# Today is 1st boot !
date +%m%d"20"%y" "%H":"%M">>Check time start!" >> $Dstamp_file #將日期時間寫入 date_stamp檔案中
at now +1 hours < $Home_dir/check_net/at_script #一小時後執行 at_script,關閉網路
# After 1 hour Network shutdown
else #如果有比對成功,表示今天已經開機過了
# Today is not 1st boot !
# Network down ...
ifconfig en0 down #就關閉網路
date +%m%d"20"%y" "%H":"%M" >> Check time" >> $Dstamp_file #將日期時間寫入 date_stamp檔案中
fi


at 指令用於定時工作, 當時間到了就執行 script 的內容
這當中 ifconfig en0 down 就是將 en0 這個網路設備關閉
如果不知道適用哪一個,可以用 ifconfig 指令查詢,可以看最後補充的部份
at_script 的內容:
限定小孩使用網路時間
#!/bin/bash
Dstamp_file=/Users/jkchang/check_net/date_stamp
ifconfig en0 down
date +%m%d"20"%y" "%H":"%M">>Check time stop!" >> $Dstamp_file


然後到 /etc目錄下用root權限將 rc 檔案備份
cp rc rc.org
接者修改 rc 檔案,在最後倒數第2行加上
/Users/jkchang/check_net/check
也就是開機時執行 check 這個 script
限定小孩使用網路時間

由於OSX 10.4 內定at的功能是關閉的(manual說的)所以要將它打開:
限定小孩使用網路時間
先到 /System/Library/LaunchDaemons 目錄下將 com.apple.atrun.plist 備份
cp com.apple.atrun.plist com.apple.atrun.plist.org
限定小孩使用網路時間
將 com.apple.atrun.plist 檔案中的 <integer>300</integer> 的 300改為10 這樣 會比較準時,如果維持300也行,但是時間會超過,
這個我想應該是在300秒內完成at的工作吧?

限定小孩使用網路時間

然後輸入launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist
限定小孩使用網路時間

ok這樣就可以了, 重新開機.
開機的時間會記錄在 date_stamp這個檔案中, 順便可以知道小孩開機的時間, 和網路關閉的時間
限定小孩使用網路時間
有一點必須要注意的是 rc file 一定要備份,這個檔案攸關開機執行系統的程序,
還有就是這範例中的1小時是在登入畫面之前就開始計算囉!

希望對有需要的人有幫助!

12/16晚間補充:
如果網路是用cable 的那用 ifconfig 查詢的結果可能如下:
那要關閉或啟動就可以這樣寫:
ifconfig en0 down
ifconfig en0 up

限定小孩使用網路時間

相同的,如果是用無線網路,那查詢的結果可能如下圖
那要關閉或啟動就可以這樣寫:
ifconfig en1 down
ifconfig en1 up


限定小孩使用網路時間

參考資料:
1. O'Reilly bash shell 入門
2. 線上 manual
3. 【分享教學】定時執行排程:at 指令


文章關鍵字
JK.Chang wrote:
這個構想是因為小孩使...(恕刪)


偏好設定裡面
不是有可以設定家長監控的設定嗎??
請問跟您的這篇硬派的設定
有何不同呢??
applefolks wrote:
偏好設定裡面不是有可...(恕刪)

喔! 是嗎?!

我正好在練習 shell 的script 所以才會寫這篇,
如果善用 at 與 crontab 可以變化出很多的定時工作,
當然如果有現成的監控軟體是最好的囉!
系統的威力來自於程式間彼此的關係多於程式本身!
JK.Chang wrote:
喔! 是嗎?!我正好...(恕刪)


喔~了解
想說怎麼會這麼硬派哩
您可以到
系統偏好設定>分級保護控制
進去看一看
我覺得這個部分作的還不錯耶
還是給樓主一個愛的鼓勵!
硬派作風,值得敬佩
雖說preference中已有Parental Controls的設定
但按照樓主的作法應該會有更大的彈性
...
例如,小孩子常上網時
跳出數學課本教材的畫面,強迫他讀數學
例如,跳出一個聯絡簿,旁邊附上樓主抓狂的臉
更狠一點,就放張鬼照片吧
yLi
pocman wrote:
還是給樓主一個愛的鼓...(恕刪)


我還在想說要不要強制關機耶?!

at now +2 hours < at_script



#以下是 at_script 內容

#!/bin/bash

sync #資料同步
sync
halt #關機
系統的威力來自於程式間彼此的關係多於程式本身!
看不是很懂,不過我直覺是這小孩子還真幸福...
我小時候都沒有mac可以玩...
樓主真厲害...

不過這文章讓我想像出一個MAC廣告.. (畫面請自行想像)

MAC: HI 我是MAC

PC: HI 我是PC

PC: 最近有越來越多的新聞說長時間讓小孩使用電腦不好 所以我寫了一些程式碼來控制我的小孩使用電腦 真是棒極了!

MAC: 喔.. PC你知道嗎? 在MAC只需要透過家長監控的設定按幾下就可以輕鬆控制時間 還可以控制可以使用的應用程式..等等"

PC: 阿..



真的不是針對樓主喔!!!

如果不好笑請當作沒看到...
Kindness, Clarity, and Insight
davidfisher531 wrote:
樓主真厲害...不過...(恕刪)


沒有很厲害啦,
不過PC上真的蠻多軟體可以選擇,
但是用MAC的另一個好處是:
現在的核心是Like linux 的 BSD ,
那我可以用bash or Perl or Ruby 等等工具來撰寫 script
這些 script 稍作修改就能在 Linux or UNIX上執行.

系統的威力來自於程式間彼此的關係多於程式本身!
樓主這篇文章寫的好啊

點出了其他作業系統和 windows的不同

windows要灌軟體,在MAC 和 Linux底下工具都已經附在作業系統裡了

文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!