Fixed: MacOS Mojave(10.14) 解决终端用Crontab报权限问题(不管是Root还是普通用户)及Linux基础(shell)...
前言
對于一些系統以及項目依賴,個人都有跟進的習慣;
Macos內置launchctl來寫定時任務..不會...
還是選擇了Linux常用的crontab;
問題
這問題可能是系統安全策略的問題.我一開始嘗試了好久;
不管是用Root還是自身用戶..都會報Operation not permitted(任務沒法寫入);
開始沒想到是系統版本太新(安全策略)的問題,實在沒轍只能去找來同事一起排查,排除了語法還是其他一些問題,
還是有問題,我說要不去你電腦試試,他的是10.13(能正常運行).于是開始谷歌大法,終于在國外的論壇也有遇到類似的問題..
有說到關閉Rootless機制的,也有說添加硬盤操作權限的,我選擇了后者;
- 關閉Rootless的機制
我沒試過這個姿勢..有興趣的自己試試..
- 添加硬盤訪問權限的,就是把你的終端加進去這里
Crontab的姿勢
crontab的用法還是很簡單的
- -e: 就是進入編輯
- -u: 指定用戶
- -l: 列出調度清單
- -r: 刪除調度任務
不帶用戶參數都是都是基于當前用戶來啟用crontab控制
語法格式:分鐘 小時 日 月 周 command shell_file
# demo */5 * * * * /bin/zsh /Users/linqunhe/Code/u-logs/autoShell.sh# / 是每隔, 還支持 , - 這類指定和連續的..具體看對應的手冊吧復制代碼腳本的權限記得設置好,比如你指定普通用戶的,744便足以
r:4 , w:2 ,x : 1 ; u-g-o(自己/組/其他)-rwxr--r--@ 1 linqunhe staff 867B Dec 7 14:50 autoShell.sh復制代碼我的調度需求很簡單,就是更新一些東西,有涉及到alias , 用到了zsh(因為寫在.zshrc)
source ~linqunhe/.zshrc logPath="/Users/linqunhe/Code/u-logs/logs/$(date +'%Y-%m-%d').log" echo '--------更新腳本開始走起--------------' >> $logPath# 更新NG項目 cd /Users/linqunhe/Code/ng-sx-pc ng update --all 2>&1 >> $logPath echo '---------Ng Update End-------------' >> $logPath# 更新nuxt項目 cd /Users/linqunhe/Code/nuxt2-sx-mobile-share yarn outdated 2>&1 >> $logPath yu echo '---------Nuxt Update End-------------' >> $logPath# 更新umi項目(yu是我寫的alias) cd /Users/linqunhe/Code/umi_dva_sx_admin yarn outdated 2>&1 >> $logPath yu echo '---------Umi Update End-------------' >> $logPath# 更新老的react-sx-admin cd /Users/linqunhe/Code/react-sx-admin yarn outdated 2>&1 >> $logPath yu echo '---------react-sx-admin Update End-------------' >> $logPath# 更新全局的yarn npmyarn ygu 2>&1 >> $logPath echo '---------yarn global Update End-------------' >> $logPath# 列出全局的npm 包 ygl 2>&1 >> $logPath echo '---------yarn global list End-------------' >> $logPath# 更新brew && brew cask brew prune brew update 2>1 >> $logPath brew upgrade 2>&1 >> $logPath brew cask upgrade 2>&1 >> $logPath echo '----------Brew && Brew Cask Update End------------' >> $logPath# 更新MAC系統 softwareupdate -i -a 2>&1 >> $logPath echo '--------Mac OS Update End--------------' >> $logPath echo '--------更新腳本結束--------------' >> $logPath是1,所以">/dev/null"等同于"1>/dev/null" # 2 :表示stderr標準錯誤 # & :表示等同于的意思,2>&1,表示2的輸出重定向等同于1復制代碼輸出就這樣了
- 2018-12-07.log
總結
為什么在本本寫任務調度,因為筆記本常年不關機..基本都是待機狀態,開蓋即用..
有不對之處請留言,會及時修正. 謝謝閱讀
總結
以上是生活随笔為你收集整理的Fixed: MacOS Mojave(10.14) 解决终端用Crontab报权限问题(不管是Root还是普通用户)及Linux基础(shell)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css中的px、em、rem 详解
- 下一篇: 判断时间戳是星期几