1

I am trying to copy a file on reboot as raspberry pi deletes my .asoundrc file every time. I have a copy of the file saved and a shell script I wrote. The shell script works, but I cannot get it to run in crontab. According to

Code in script named copyASoundRC.sh

#!/bin/bash
cp '/home/sox/asound data/.asoundrc' '/home/sox'

attempted code in crontab

@reboot bash "/home/sox/asound\ data/copyASoundRC.sh"

Any help is greatly appreciated

ps this is a repost from the Raspbery Pi exchange, they said it did not belong there. Please don't get angry for that.

Edit 1 based on @Seamus answer

#!/bin/bash
cp /home/sox/asoundData/.asoundrc /home/sox

@reboot /home/sox/asoundData/copyASoundRC.sh >> /home/sox/mylogfile.txt 2>&1

There are no errors in mylogfile.txt, but it still does not work

Collin
  • 13
  • 4
  • Check out https://unix.stackexchange.com/questions/109804/crontabs-reboot-only-works-for-root – RonJohn Mar 30 '23 at 18:53
  • 1
    I checked to see if cron reboot exists using what is suggested in the chain '@reboot echo "hi" > /home/sox/reboot.txt 2>&1 ' @RonJohn and it works. but still no copy action – Collin Mar 30 '23 at 19:22
  • @Peregrino69 deleted, thank you for reminder. The last bit of your comment is cut off, about pointing something out. I am guessing it is about more detail. The issue is, there is not more to add. I created the sh file, which works. I added it to cron on '@restart' it does not – Collin Mar 30 '23 at 19:31
  • 1
    Use quoting with `"` or backslash-escaping, but not both. – Jim L. Mar 30 '23 at 19:35

1 Answers1

0

It appears you may have mangled your script, and your crontab entry...

  • why do you have a space between asound and data in cp '/home/sox/asound data/.asoundrc' '/home/sox'??
  • why do you have a back-slash in the crontab entry??
  • where exactly is the folder you refer to as data??

Assuming the folder data is actually located at /home/sox/asound/data try this for your script & crontab entries:

#!/bin/bash
cp /home/sox/asound/data/.asoundrc /home/sox
@reboot sleep 60; /home/sox/asound/data/copyASoundRC.sh >> /home/sox/mylogfile.txt 2>&1

This (assuming that's the correct location for your copyASoundRC.sh script) will re-direct (>>) stderr and stdout to a logfile to help you with troubleshooting.

Seamus
  • 2,522
  • 1
  • 16
  • 31
  • So I used your code to modify mine (no idea why I put a space in the file name) so it now reads as follows `#!/bin/bash `cp /home/sox/asoundData/.asoundrc /home/sox `@reboot /home/sox/asoundData/copyASoundRC.sh >> /home/sox/mylogfile.txt 2>&1 There are no errors now, but it still does not work (Originally there were errors, thus change to no space) – Collin Mar 30 '23 at 19:49
  • Just thinking about it, it may be caused by the same problem that I am doing this for. asound for me is being deleted, so I am trying to put it back. Maybe it is being deleted after I move it as well? – Collin Mar 30 '23 at 20:04
  • @Collin: Coupla' things: **1.** When I read your question, I wondered **why** this file was being deleted; i.e. are you sure you've set this `asound` thing up properly?? **2.** Have you looked at `/home/sox/mylogfile.txt` for any clues?? It **could in fact be** that your file is being deleted if the deletion action takes place after the `@reboot` script... that depends on **when** it's being deleted. You could try copying the file to a different location where it can't be found by `asound`? – Seamus Mar 30 '23 at 20:14
  • @Collin: To avoid a process that deletes your file after `@reboot` runs, try adding a `sleep` statement to your `crontab` entry (see the edit in my answer). – Seamus Mar 30 '23 at 20:22
  • 1
    Thank you so much for this! It now works! In Raspberry Pi, they recently swapped to a new audio thing, pulseAudio, dumping Alsa. Even though both are still in there, this file kept on being deleted, but I need it to amplify a mic input due to pulseAudio not having this yet. Thank you again for the delay. That fixed my issue! – Collin Mar 30 '23 at 20:29
  • @Collin: :) Yeah, `sleep` is a cheap trick, but can avoid *situations* (some wrought by `systemd` - the `init` system) in `cron` where timing is an issue. Understand there's nothing magical about `60` (seconds); it could be 30 or 10 or .... IOW, it's *trial-and-error*. – Seamus Mar 30 '23 at 20:36