如何创建可自动执行的广告管理员运行命令?

如何创建可自动执行的广告管理员运行命令?

我有一台运行 Ubuntu 的旧笔记本电脑。但是这台电脑的容量很小,所以我必须经常清洁。但是用命令打开文件,复制并粘贴到终端中,很快就会变得无聊。所以我的想法是每 5 小时设置一次 cron 作业。但我甚至无法让 .sh 文件执行我的管理任务,即使我给了它 chmod 777。

我的 clean.sh 中的命令:

#!/bin/bash
free -h && sudo sysctl -w vm.drop_caches=3 && sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches && free -h
echo 3 > /proc/sys/vm/drop_caches && swapoff -a && swapon -a && printf '\n%s\n' 'Ram-cache and Swap Cleared'
sync; echo 2 | sudo tee /proc/sys/vm/drop_caches 
sync; echo 1 | sudo tee /proc/sys/vm/drop_caches 
apt-get purge $( dpkg --list | grep -P -o "linux-image-\d\S+"| head -n-4 )
apt-get autoremove
apt-get clean
sync && echo 3 | sudo tee /proc/sys/vm/drop_caches***
update-grub
apt-get autoremove --purge
apt-get remove package-name1 package-name2
apt-get autoremove

我该如何做才能让它执行这些命令行?

答案1

  • chmod 777很糟糕。如果该系统上有 2 个人或更多人,则最多为 750,否则为 700。
  • 不要sudo放入脚本。使用 sudo 运行脚本。如果您需要“root”,则需要sudo -i先获取#。或者使用/etc/crontab用户“root”。
  • 如果您使用 cron,请不要在脚本中放置仅回显结果的命令(如free -h)。否则,您需要将其重定向到文件,以便查看结果。

但我甚至无法让 .sh 文件执行我的管理任务,

它执行的是

./clean.sh

您需要检查它显示的错误。其中一些命令看起来不对劲;我认为该sysctl命令需要 root 权限,而不是 sudo 权限。

如果您想使用 cron 执行此操作,请在./和之间添加文件的目录clean.sh

其中的内容/etc/crontab可能是这样的:

0 5,10,15,19,23 * * *    root    ./dir/dir/clean.sh

运行时间为上午 5 点、10 点、下午 3 点、7 点和晚上 11 点。

您可以通过添加来添加重定向到日志通知>> /var/log/clean.log

我个人不会使用 cron,而是使用 systemd 来完成此任务,并添加一些逻辑:仅当系统达到阈值时才执行此操作:如果free -h显示已用内存超过 90% 左右,则执行这些行。这样,系统就会在需要时被清除。

还要注意,其中大多数都无法解决“但是这台电脑的容量很小”的问题。

这些不需要每 5 小时运行一次:

apt-get purge $( dpkg --list | grep -P -o "linux-image-\d\S+"| head -n-4 )
apt-get autoremove
apt-get clean


apt-get autoremove --purge
apt-get remove package-name1 package-name2
apt-get autoremove

为什么会有update-grub?您不能在此脚本中更改 grub。

答案2

要在 Ubuntu 上以 root 权限运行脚本,您可以使用sudo crontab -e将脚本添加到系统 crontab 文件中。

您要执行的脚本应该是可执行的,即设置可执行位。出于安全考虑,最好只为所有者设置可执行位,并将脚本的所有者更改为,root以便只有root该脚本可以执行。

相关内容