Ric*_*k T 1 permissions bash scripts
我有一个名为clearcache.sh的脚本来清除我的缓冲区/缓存,但是当我运行时它一直说权限被拒绝。
脚本中的内容:clearcache.sh
#!/bin/bash
sync && echo 1 | tee /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)
-rwxr-xr-x 1 rt rt 464 Dec 5 02:10 clearcache.sh
Run Code Online (Sandbox Code Playgroud)
我如何运行它来测试它:
rt@sys76:~/clearcache$ ./clearcache.sh
tee: /proc/sys/vm/drop_caches: Permission denied
1
Run Code Online (Sandbox Code Playgroud)
我想把它放在一个 chron 工作中,但我需要解决这个权限问题:
更新: 这是drop_caches文件,它的权限归 root 所有,使用脚本从 chron 作业运行它的正确方法是什么?PS:我正在运行 Ubuntu 20.04
根和烫发
我猜你用 root (?) 运行你的脚本,
无论如何,你不应该修改文件的访问权限
无需开球
你不需要tee,你最好使用sysctl
sudo sync && sudo sysctl vm.drop_caches=1
Run Code Online (Sandbox Code Playgroud)
页面缓存、dentries 和 inode
vm.drop_caches=1 # to free pagecache
vm.drop_caches=2 # to free dentries & inodes
vm.drop_caches=3 # to free pagecache, dentries & inodes
Run Code Online (Sandbox Code Playgroud)
那么为什么不使用 vm.drop_caches=3
定时任务
当你想用 cron 调度它时,你可以为 root 用户设计你的脚本,然后通过在 root 的 crontab 中插入一个作业来调度它
剧本
#!/bin/bash
/usr/bin/sync
# /usr/bin/echo 1 | /usr/bin/tee /proc/sys/vm/drop_caches
/usr/sbin/sysctl vm.drop_caches=1
Run Code Online (Sandbox Code Playgroud)
将脚本文件放在 root 用户可用的目录中。对于/root文件夹中的ex ,即/root/clearcache.sh
然后添加一个root cronjob
这里,脚本会每天每小时0分钟运行一次
sudo crontab -e
0 * * * * /root/clearcache.sh
Run Code Online (Sandbox Code Playgroud)
最后
不需要一个脚本,只需在root的crontab中添加两个命令作为job
sudo crontab -e
0 * * * * /usr/bin/sync; /usr/sbin/sysctl vm.drop_caches=1
Run Code Online (Sandbox Code Playgroud)