清除缓冲区/缓存的脚本仍然说权限被拒绝

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

图像2

cma*_*.fr 5

根和烫发

我猜你用 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)