我正在尝试向我自己的 shell 添加一个新命令,例如:
alarm 7.15 music.wav
我想创建一个 cron 作业,以便它可以在每天的指定时间安排闹钟。因此,我为每次闹钟调用创建一个名为musicFile.txt
这是我要运行的 bash 文件:(musicFile.txt)
#!/bin/bash
15 7 * * * XDG_RUNTIME_DIR=/run/user/$(id -u) play -q /home/harun/Desktop/music.wav > alarmFile
crontab alarmFile
rm -f alarmFile
rm -f musicFile.txt
然后我用 execvp 执行此注释:
bash musicFile.txt
但是什么都没发生。如何使用 crontab 设置闹钟?
答案1
就我而言,我使用当前用户会话运行 crontab:
$ crontab -e
* * * * * /usr/bin/play -q /home/user/test/bell.wav
这使得声音每分钟都在播放。
首先尝试使用更简单的命令。
如果要为不同用户配置警报,可以crontab -e
从他们的终端会话中使用。要切换到其他用户终端会话,请使用su username
命令。
但是,更好的方法是,不要在 crontab 中使用带参数的命令,而是使用脚本并在 crontab 中指定其路径。不要忘记chmod +x yourscriptpath
,也不要忘记指定二进制文件的完整路径,并通过执行来检查脚本sh pathtoyour/script.sh
如果您可以在终端中运行以下命令:
XDG_RUNTIME_DIR=/run/user/$(id -u) play -q /home/harun/Desktop/music.wav > alarmFile
crontab alarmFile
rm -f alarmFile
rm -f musicFile.txt
crontab -e
然后,您可以尝试通过命令执行和编辑将其添加到您的 crontab 文件中:
15 7 * * * XDG_RUNTIME_DIR=/run/user/$(id -u) play -q /home/harun/Desktop/music.wav > /home/harum/alarmFile && /bin/rm -f /home/harun/alarmFile && /bin/rm -f /home/harum/musicFile.txt
要检查它现在是否有效,只需替换15 7
为* *
。
脚本创作:
vim.tiny /home/harum/alarm.sh
#!/bin/bash
XDG_RUNTIME_DIR=/run/user/$(id -u) play -q /home/harun/Desktop/music.wav > /home/harum/alarmFile && /bin/rm -f /home/harun/alarmFile && /bin/rm -f /home/harum/musicFile.txt
使脚本可执行:
chmod +x /home/harum/alarm.sh
将脚本添加到crontab:
crontab -e
15 7 * * * /home/harum/alarm.sh
最后,正如一位评论者所建议的那样,您可以XDG_RUNTIME_DIR
在脚本中直接指定特定用户(如果您想以 root 身份运行脚本,但在脚本中使用其他用户 ID:
XDG_RUNTIME_DIR=/run/user/$(id yourSpecificUser | awk -F" " '{print $1}' | awk -F"(" '{print $1}' | awk -F"=" '{print $2}')