Solaris
如何以非互動方式在 Solaris 上為非 root 使用者更新 crontab?
我想為作為 OpenPKG RPM 包安裝的應用程序更新非 root 使用者的 crontab 條目。
目前我在
%post
.spec 文件的部分中有這個:# # Set up the 'app' user's crontab. # Marker lines are used to separate content from different packages: # #Begin of App package # # ... # #End of App package # Replace any possibly existing content between these lines and insert the # content of the installed new file CRONTAB=/var/spool/cron/crontabs/%{V_user} if [ -f $CRONTAB ]; then begin=`head -1 %{V_instdir}/etc/crontab` end=`tail -1 %{V_instdir}/etc/crontab` if [ -z "$begin" ] || [ -z "$end" ]; then echo "Error: Start or end delimiter line is empty. Check '%{V_instdir}/etc/crontab'" exit 1 fi sed -e "/^$begin/,/^$end/d" $CRONTAB > $CRONTAB.tmp cat %{V_instdir}/etc/crontab >> $CRONTAB.tmp mv $CRONTAB.tmp $CRONTAB else cp %{V_instdir}/etc/crontab $CRONTAB fi chown root:sys $CRONTAB chmod 600 $CRONTAB
這不起作用:該文件已正確創建,但
cron
不接受更改。我想不允許/var/spool/cron
直接編輯文件。編輯 crontab 的正確方法是什麼?
crontab
手冊頁沒有提到從文件中為使用者載入 crontab 的方法。它不接受來自標準輸入的一個。- 我可以向
cron
守護程序發出信號以重新讀取 crontab 文件嗎?- 或者我應該
su
使用su %{V_user} -c "crontab -l > $tmpfile" # Make the changes su %{V_user} -c "crontab $tmpfile"
如果目標使用者沒有編輯自己的 crontab 文件的權限,這不會失敗嗎?
作業系統是 Solaris 10。我沒有 root 訪問權限。其他人必須安裝我創建的 RPM 包。
不幸的是,cron(1M) 不接受任何重新讀取 crontab 的信號。crontab(1) 工具與 cron 通信的方式是通過程序間通信(參見原始碼)。也就是說,似乎 crontab 可能是您可以用來修改使用者的 crontab 的最佳工具。您可以編寫一個腳本來添加/刪除/修改 crontab 並按如下方式使用它:
EDITOR=<your script> crontab -e <user>
該腳本採用一個參數,即包含該使用者的 crontab 副本的文件的名稱,處理該文件,並以返回碼 0 退出。crontab 然後將向 cron 發出使用者的 crontab 已更改的信號。但是,如果您最終得到一個空的 crontab,則必須更改策略並使用
crontab -r <user>
反而。有點煩。
另一種可能性是在修改後重新啟動 cron
svcadm restart cron
但這需要 su 或至少是 solaris.smf.manage.cron 正確的。