我有这个测试脚本:
root@PC:~# cat /usr/wsh/swap_reload.sh
# Swap clear
# 03.08.2017
swapoff -a ;
swapon /tmp/swap
root@PCA73:~# ls -l /usr/wsh/swap_reload.sh
-rwxr-xr-x 1 root root 94 авг 10 16:24 /usr/wsh/swap_reload.sh
我还添加了 cron 任务(root cron):
* * * * * /usr/wsh/swap_reload.sh
但是当我每 5 分钟查看一次时free
- 它并没有变化(但是每分钟都应该刷新分配的交换,不是吗?
root@PCA73:~# free -h
total used free shared buff/cache
available Mem: 31G 921M 3,9G 16G 26G
13G Swap: 99M 47M 52M
为什么它不起作用?
答案1
你的脚本没有 Shebang 行
#!/bin/sh
...
如果没有该行,脚本只能从 shell 运行,并且该 shell 将猜测该脚本将作为 shell 脚本执行。基本顺序如下:
- shell 尝试将脚本作为二进制文件执行,而内核可能会或可能不会寻找魔法数字(将
#!
其计为魔法数字) - 如果这不起作用,那么 shell 会将该脚本作为 shell 脚本执行。
这就是为什么当你从 shell 调用脚本时它能起作用,尽管它缺少 shebang 行。
如果你从 cron 运行脚本,那么就没有父壳 可以猜测如何执行脚本。为了避免这种情况,请添加 舍邦像这样:
#!/bin/sh
# Swap clear
# 03.08.2017
swapoff -a ;
swapon /tmp/swap
进一步阅读: