前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Fixed: MacOS Mojave(10.14) 解决终端用Crontab报权限问题(不管是Root还是普通用户)及Linux基础(shell)

Fixed: MacOS Mojave(10.14) 解决终端用Crontab报权限问题(不管是Root还是普通用户)及Linux基础(shell)

作者头像
CRPER
发布2018-12-24 11:06:41
1.7K0
发布2018-12-24 11:06:41
举报
文章被收录于专栏:CRPER折腾记CRPER折腾记

前言

对于一些系统以及项目依赖,个人都有跟进的习惯;

Macos内置launchctl来写定时任务..不会...

还是选择了Linux常用的crontab;


问题

这问题可能是系统安全策略的问题.我一开始尝试了好久;

不管是用Root还是自身用户..都会报Operation not permitted(任务没法写入);

开始没想到是系统版本太新(安全策略)的问题,实在没辙只能去找来同事一起排查,排除了语法还是其他一些问题,

还是有问题,我说要不去你电脑试试,他的是10.13(能正常运行).于是开始谷歌大法,终于在国外的论坛也有遇到类似的问题..

有说到关闭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)

#!/bin/zsh
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

总结

为什么在本本写任务调度,因为笔记本常年不关机..基本都是待机状态,开盖即用..

有不对之处请留言,会及时修正. 谢谢阅读

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年12月07日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 问题
  • Crontab的姿势
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档