Hi Yulran, I think this is related to how gexps are expanded. In your first gexp, you use #$accounts, which expands to ("account1" "account2"), and it's interpreted as a procedure call.
Untested, but '#$accounts should work. It might be easier to work with a single gexp, like so: #~(job '(next-second (range 1 61 10)) (lambda () (let ((accounts …)) … (system …)))) Le 9 décembre 2024 13:36:45 GMT+01:00, Yulran <yul...@posteo.net> a écrit : >Hi guix, > >I'm having trouble with nesting g-expressions when defining a mcron job. I >want the job to run the same "mastodon-archive" commands for several accounts, >so I define a list of accounts and use 'map' to build the complete command. >This works well when there are only strings involved, but I can't make it work >with gexps. > >Here's a simplified example with only strings: > >--8<---------------cut here---------------start------------->8--- >(define succeeding-job > (let* ((accounts '("account1" "account2")) > (cmd (apply string-append > (map > (lambda (acct) > (string-append > "mastodon-archive archive " acct "; ")) > accounts)))) > #~(job '(next-second (range 1 61 10)) > (lambda () > (system (string-append "echo '" #$cmd "'"))) > "mastodon-archive"))) >--8<---------------cut here---------------end--------------->8--- > >The job succeeds and the mcron log prints as expected "mastodon-archive >archive account1; mastodon-archive archive account2;". Now to use the full >path to the mastodon-archive binary, cmd must be a gexp: > >--8<---------------cut here---------------start------------->8--- >(define failing-job > (let* ((accounts '("account1" "account2")) > (cmd #~(apply string-append > (map > (lambda (acct) > (string-append > #$mastodon-archive "/bin/mastodon-archive archive " > acct "; ")) > #$accounts)))) > #~(job '(next-second (range 1 61 10)) > (lambda () > (system (string-append "echo '" #$cmd "'"))) > "mastodon-archive"))) >--8<---------------cut here---------------end--------------->8--- > >The home configuration builds fine, but the mcron job fails with the error: >(wrong-type-arg #f Wrong type to apply: ~S (account1) (account1)) > >I played around with gexp-ing the string-append in the lambda, ungexp-ing >acct, and trying every other combination of gexp/ungexp I could think of, but >I could only make it worse. > >Any idea what I'm doing wrong? >