1. 程式人生 > >授權普通使用者Linux crontab定時任務

授權普通使用者Linux crontab定時任務

專案需求,在Linux下做個定時任務,而且是普通使用者下可控的。網上找資料,方向沒找對,就暫時用root使用者做定時任務。最後別人提示用sudo,才有了這篇文章。

下面就說一下方法:

1. 建立任務(普通使用者)
crontab -e 編輯計劃任務

加上任務,如下行

*/2 * * * * cd /home/sky/apache-activemq-5.11.1/bin/;./activemq start(每兩分鐘啟動一次,見下面語法結構)

2. 給普通使用者授權sudo(root使用者)
給普通使用者授權sudo,用sudo 提升普通使用者service命令許可權

1)切換root使用者,可以用vim /etc/sudoers對檔案編輯(先賦許可權chmod u+w /etc/sudoers),但最好使用visudo命令編輯,原因兩點:一是它能夠防止兩個使用者同時

修改它;二是它也能進行有限的語法檢查。

2)找到"root ALL=(ALL) ALL",在下面加一行“XXX ALL=(ALL) ALL”即完成授權 

“XXX”是使用者名稱。

3)此時該使用者擁有root所有許可權,要做一下限制,先說一下上面三個ALL的含義:

①網路中的主機名(建議用ALL,實際不確定遠端主機名),

②目標使用者,也就是以誰的身份去執行命令(建議ALL)

③命令(最好不用ALL,否則方法二就沒意義了,多個命令逗號隔開),預設5分鐘sudo密碼過期,怕麻煩命令前加“NOPASSWD:”  

所以上面增加內容應改為:

“XXX ALL=(ALL) NOPASSWD:/sbin/service”

3. 重新啟動任務計劃
方法一:    切換到root使用者    service crond restart(安全性考慮,不建議此方法)

方法二:    切換普通使用者,執行sudo service crond restart即可

4. 語法機構
minute hour day month dayofweek command

    minute - 從0到59的整數 

    hour - 從0到23的整數 

    day - 從1到31的整數 (必須是指定月份的有效日期)

    month - 從1到12的整數 (或如Jan或Feb簡寫的月份)

    dayofweek - 從0到7的整數,0或7用來描述週日 (或用Sun或Mon簡寫來表示)

    command - 需要執行的命令(1、多行命令用“;”或者“&&”隔開,“;”不管命令是否出錯都會連續執行下去,“&&” 出錯則停止。 2、可以是指令碼)

(網上很多資料)

5. 常用命令
crontab –u //設定某個使用者的cron服務,一般root使用者在執行這個命令的時候需要此引數  

crontab –l //列出某個使用者cron服務的詳細內容 

crontab –r //刪除某個使用者的cron服務 

crontab –e //編輯某個使用者的cron服務

service crond start

service crond stop

service crond restart

service crond reload
--------------------- 
作者:dahangg 
來源:CSDN 
原文:https://blog.csdn.net/dahangg/article/details/50537666 
版權宣告:本文為博主原創文章,轉載請附上博文連結!